我正在使用Ajax調用自己調用AWS的NodeJS/ExpressJS post方法,並且我希望將AWS返回狀態返回給瀏覽器。毫不奇怪,在下面片段末尾的「res.status(200).send('Success!');」在AWS本身甚至被調用之前調用,因此沒有意義。但無法弄清楚如何在AWS的匿名返回函數中獲取原始Ajax「res」對象,因此我可以調用.status和.send。看起來很簡單,但一直沒有弄清楚。如何從Node.JS/Express.JS post()方法返回AWS錯誤狀態?
router.post('/notification', function(req, res) {
var config = req.app.get('config');
var sns = new AWS.SNS({ region: config.AWS_REGION});
var snsMessage = 'Hello world!';
sns.publish({ TopicArn: config.NEW_SIGNUP_TOPIC,
Message: snsMessage }, function(err, data) {
if (err) {
console.log('Error publishing SNS message: ' + err);
} else {
// How to get the original res object here, so I can call
// res.status(200).send('It worked!') here
console.log('It worked!');
}
});
// The following line returns status to the original ajax post call
// before AWS is even called.
res.status(200).send('Success!'); //
});
是的,工作!誰知道!令我驚訝的是,「res」的範圍可能擴展到稍後執行的匿名回調函數,但我猜JavaScript理解它正在調用方法中訪問一個對象並使其工作。非常感謝! –
爲了好玩,我只是嘗試在router.post()中創建一個局部變量foo,並且正如我期望的那樣,在嘗試訪問回調中的foo時出現錯誤。我想我在指望原始請求對象沒有去任何地方的事實,因此回調仍然可以得到它?思考? –
你應該閱讀JavaScript範圍。如果您有新問題,請展示您的新代碼。或者將其作爲一個新問題提出。 –