我试图了解闭包在node.js中的工作原理
我有一个快速中间件抓取远程站点(* json)的内容。这里的情况是我无法使用远程内容更新快速请求(我认为可能),以便在其他中间件中进一步处理它。
欢迎任何帮助:)
问候
const request = require('request');
const app = require('express')();
const base = { url: 'http://api.xxx', record: 'todo' };
function getFile(opts, cb) { // parse url using request
request({
url: opts.url,
headers: {
'User-Agent': 'request',
'Content-type': 'application/json'
}
}, function (error, response, body) {
if (error || response.statusCode != 200) {
cb(error);
} else {
var ret = {content: JSON.parse(body), request: opts}
cb(null, ret);
}
});
}
function grabData(req, res, next) {
console.log(new Date(), req.method, req.url);
getFile(base, function(err, data){
console.log(data.content); // WORKS OK!
//? How to get data.content injected in the request
// req.contents = data.content // not working
next();
});
}
// function calls ---------------------
app.use(grabData);
//app.use(furtherProcess) //? how to pass args here?
app.get('/', function(req,res){
res.send("> "+req.contents);
res.end();
});
app.listen(3000, function(){ console.log('Listen on port 3000...' ); });
答案 0 :(得分:1)
我在中间件中看不到对next()
的任何调用。修改next()
对象后,您需要调用req
:
function grabData(req, res, next) {
getFile(base, function(err, data){
req.contents = data;
next();
})
}