2013-12-18 5 views
1

요청을 처리하기 위해 익스프레스 프레임 워크를 사용하고 있습니다. 일부 단계는 비동기 함수 호출과 관련됩니다. 결국 나는 이러한 함수 중 하나에서 계산 된 값을 반환하고 싶습니다.node.js 콜백에서 응답 보내기

app.post("/hello", function(req, res) { 
    ... 
    ... 

    myFunc(finalFantasy); 
} 

function myFunc(callback) { 
    ... 
    callback(); 
} 

function finalFantasy() { 
    //I want to return this value in the response 
    var result = "magic"; 
} 

어떻게 응답에 파이널 판타지 기능에서 계산 된 값을 사용할 수 있습니까?

+0

코드 구조가 iden 인 경우 tical을 질문에 표시하려면'myFunc'가'callback'의 결과를 리턴하고 그것을 사용하십시오. – raina77ow

답변

1

콜백에 res 인스턴스를 전달하거나 두 번째 예제처럼 콜백을 사용해야합니다.

app.post("/hello", function(req, res) { 
    ... 
    ... 
    var i = 3; 

    myFunc(i, function(data) { 
     res.end(data); // send 4 to the browser 
    }); 
} 

function myFunc(data, callback) { 
    data++; //increase data with 1, so 3 become 4 and call the callback with the new value 
    callback(data); 
} 
+0

req/res를 래퍼 myFunc에 전달하고 finalFantasy를 req/res에 종속되게 만드는 미들웨어에만이 작업을 수행해야하며 다른 코드는 req/res 객체가 없어도 해당 메서드를 사용할 수 있습니다. –

+0

두 번째 예제가 훨씬 좋다. app.post 콜백에 대한 제어권을 돌려 준다. 누가 원래의 req/res를 가지고 있는가? –

1

res을 계속 전달하고 마지막 "응답 생성 함수"에 데이터를 보내십시오.

app.get("/", function(req, res, next) { 
    // do things 
    next(); 
},function(req, res, next) { 
    // do more things 
    next(); 
},function(req, res, next) { 
    // do even more things! 
    next(); 
},function(req,res) { 
    // and finally we form a response 
    res.write(things); 
}); 

당신이 일반적으로 미들웨어 파일에 넣고 다음, 그 함수를 호출하는 것을 포함하지만 :

명시 적으로이 작업을 수행하는 일반적인 방법은 res.locals에 지속적인 값을 저장, 미들웨어 폭포를 사용하는 것입니다
// middleware "lib/functions.js" file 
module.exports = { 
    a: function(req, res, next) { ... }, 
    b: function(req, res, next) { ... }, 
    c: function(req, res, next) { ... } 
} 

다음 app.js, main.js에서, 또는 유사 명백한 기본 파일 :

var mylib = require("./lib/functions"); 
... 
app.get("/", mylib.a, mylib.b, mylib.c); 
... 

을 수행. next 개념을 통해 스트림의 좋고 체계적인 자동 통과가 있습니다.

1

// 주석에서 말한 @ raina77ow처럼 익명 함수

app.post("/hello", function(req, res) { 
    ... 
    ... 
    myFunc(function() { 
     var ret = finalFantasy(); 
     res.send(ret); 
    }); 
} 

function myFunc(callback) { 
    ... 
    callback(); 
} 

function finalFantasy() { 
    //I want to return this value in the response 
    var result = "magic"; 
} 
1
app.post("/hello", function(req, res) { 
    ... 
    ... 

    var result = myFunc(finalFantasy); 
} 

function myFunc(callback) { 
    ... 
    return callback(); 
} 

function finalFantasy() { 
    //I want to return this value in the response 
    var result = "magic"; 
    return result; 
} 

당신은 거의 그것을했다을 사용하여 파이널 판타지 포장 :

app.post("/hello", function(req, res) { 
... 
... 

myFunc(finalFantasy, req, res); 
} 

function myFunc(callback, req, res) { 
... 
callback(req, res); 
} 

function finalFantasy(req, res) { 
//I want to return this value in the response 
var result = "magic"; 
res.end(result); 
} 

또 다른 예는 이것이다 , 결과를 다시 전달