2016-10-25 3 views
0

sendShortUrl이라는 콜백 함수를 만들었고 함수에서 뭔가를 테스트했지만 어떤 것도 인쇄하지 않았습니다. 너희들이 날 도와 줄 수있어?몽구스 : findOne의 콜백이 작동하지 않습니다.

app.post('/api/compress', (req, res) => { 
    let longUrl = checkURL(req.body.url); 
    Url.findOne({long_url: longUrl}, sendShortUrl(err, doc, longUrl)); 
}); 


function sendShortUrl(err, doc, longUrl) { 
    if(err) console.error(err); 
    console.log("success"); 
} 

답변

0

은 무엇 당신이해야 할 것은 이것이다 :

app.post('/api/compress', (req, res) => { 
    let longUrl = checkURL(req.body.url); 

    function sendShortUrl(err, doc) { 
    if(err) console.error(err); 
    console.log("success"); 
    } 

    Url.findOne({long_url: longUrl}, sendShortUrl); 
}); 

그런 sendShortUrl 매개 변수로 전달하지 않고, longUrl에 액세스 할 수 있습니다.

설명 :

다른 함수는 함수가 있다고 가정하자, 그리고 내부 : 않습니다 funcWithCallback 내가 참조로 전달 한 기능 b을 실행

function a(param1, param2) { 

    var param3 = 12; 

    // in this scope, you have access to param1, param2, param3 

    function b(param4) { 
     // in this scope, you have access to param1, param2, param3, param4 
    } 

    funcWithCallback(something, b); // calling funcWithCallback with some parameter and my b function 

} 

을 (같은 일 몽구스와 콜백), bparam1, param2, param3, param4에 접속할 수 있습니다. 어휘 스코핑이라고하며, 자바 스크립트가 작동하는 방식입니다.

간단한 정의 :

어휘 스코핑 중첩 함수에서 해결 방법 변수 이름 정의 내부 기능 상위 함수의 범위 상위 함수가 리턴하는 경우에도 를 포함한다. 만약 findOne에 함수 참조 전달할 때 경우

는, 함수는 그 안에 정의 된 변수 전달 된 파라미터와 직접 상위 기능 (제어)의 범위에 대한 액세스를 갖는다.

+0

어떻게하면 longUrl 변수를 전달할 수 있습니까? –

+0

그 전에 있었나요? 당신의 예에서는 당신이 그것을 필요 없다. 어쨌든, Mongoose는 당신이 가용 한 오류와 발견 한 문서를 전달하는 함수를 호출 할 것입니다. 외부 범위의 변수가 필요하면 콜백 함수 내에서 변수를 사용할 수 있습니다. –

+0

콜백 함수에서 longUrl 변수에 액세스하려고하면 오류가 발생합니다. 그것은 longUrl 변수를 말합니다. 기본적으로 범위 문제가 있으며 외부 범위는 콜백 함수에 변수를 전달하지 않습니다. –

0

해당 코드에서 함수를 실행 중이므로 콜백 호출을 위해 콜백 함수를 url.findOne()에 전달해야합니다.

app.post('/api/compress', (req, res) => 
{ 
    let longUrl = checkURL(req.body.url); 
    Url.findOne({long_url: longUrl}, sendShortUrl())); 
}); 


function sendShortUrl() 
{ 
    return function(err, doc) 
    { 
     if(err) console.error(err); 
     console.log(doc); 
     console.log(longUrl); 
    } 
} 
+0

콜백 함수에서 longUrl 변수에 액세스하려고하면 오류가 발생합니다. 그것은 longUrl 변수를 말합니다. –

+0

@PhillipYS를 사용해보십시오. 문제가 해결 될 것입니다. – RodrigoSaint

관련 문제