2016-01-27 43 views
0

我試圖使用express來承諾但我無法使其工作。 當我取消(1)我可以設置響應爲200,但無論我嘗試設置爲承諾響應(2,3,4)它總是返回401使用帶有承諾的Express.js端點

我可以console.logdatathen這樣的承諾是一定解決,但我相信,401被髮送,因爲函數不等待promise來解決是嗎?

我做錯了什麼,我如何設定答覆?

在此先感謝!

app.get('/get_data', function (req, res) { 

    //res.json(200, {}); return; --> (1) gives expected 200 

    tree.getData(req.param('ids')) 
    .then(function (data) { 
     // console.log('data'); --> (2) logs requested array of data 
     //return res.json(200,{}); --> (3) gives 401 
     return res.send(data); // --> (4) gives 401 
    }).fail(function (err) { 
     // never goes here 
     console.log(err); 
     return res.json(550, err); 
    }); 
}); 
+1

是否應該'.catch',而不是'.fail'? –

+0

你想要'401'來調用'.fail'方法嗎? –

+0

@JoshC。我希望能夠從'then'方法發送任何響應,但現在我不能在'then'中設置'200'而忽略它(並且它會轉到'then') –

回答

1

您需要tree.getData前加一個return返回的承諾和它的結果。一個A +承諾在快速設置狀態代碼時有catch()fail()

還需要使用res.status().send()res.send(status, data)Express res.send() Docs

app.get('/get_data', function (req, res) { 

    return tree.getData(req.param('ids')) 
    .then(function (data) { 
     return res.status(200).send(data) 
    }).catch(function (err) { 
     // never goes here 
     console.log(err); 
     return res.status(550).json(err); 
    }); 
});