은 무엇 당신이해야 할 것은 이것이다 :
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
}
을 (같은 일 몽구스와 콜백), b
은 param1, param2, param3, param4
에 접속할 수 있습니다. 어휘 스코핑이라고하며, 자바 스크립트가 작동하는 방식입니다.
간단한 정의 :
어휘 스코핑 중첩 함수에서 해결 방법 변수 이름 정의 내부 기능 상위 함수의 범위 상위 함수가 리턴하는 경우에도 를 포함한다. 만약 findOne
에 함수 참조 전달할 때 경우
는, 함수는 그 안에 정의 된 변수 전달 된 파라미터와 직접 상위 기능 (제어)의 범위에 대한 액세스를 갖는다.
어떻게하면 longUrl 변수를 전달할 수 있습니까? –
그 전에 있었나요? 당신의 예에서는 당신이 그것을 필요 없다. 어쨌든, Mongoose는 당신이 가용 한 오류와 발견 한 문서를 전달하는 함수를 호출 할 것입니다. 외부 범위의 변수가 필요하면 콜백 함수 내에서 변수를 사용할 수 있습니다. –
콜백 함수에서 longUrl 변수에 액세스하려고하면 오류가 발생합니다. 그것은 longUrl 변수를 말합니다. 기본적으로 범위 문제가 있으며 외부 범위는 콜백 함수에 변수를 전달하지 않습니다. –