我是Node.js的新手,所以我仍然将注意力集中在异步函数和回调上。我现在的难题是如何在异步操作中从文件中读取数据后返回响应。
我的理解是,发送回复的方式是这样的(这对我来说也是如此):
app.get('/search', function (req, res) {
res.send("request received");
});
但是,现在我想读取文件,对数据执行一些操作,然后在响应中返回结果。如果我想对数据执行的操作很简单,则可以执行以下操作-内联执行它们,并保持对res
对象的访问权限,因为它仍在范围内。
app.get('/search', function (req, res) {
fs.readFile("data.txt", function(err, data) {
result = process(data.toString());
res.send(result);
});
});
但是,我需要执行的文件操作既冗长又复杂,以至于我已将它们分离到单独文件中的各自功能中。结果,我的代码看起来像这样:
app.get('/search', function (req, res) {
searcher.do_search(res.query);
// ??? Now what ???
});
我需要打电话res.send
才能发送结果。但是,我不能在上面的函数中直接调用它,因为它是do_search
异步完成的。而且我不能在回调中调用它,do_search
因为该res
对象不在该范围内。
有人可以帮助我了解在Node.js中处理此问题的正确方法吗?
要访问其他函数中的变量,当没有共享作用域时,请将其作为参数传递。
你可以只通过res
,然后访问都query
与send
在函数内的一个变量。
为了分离问题,您最好传递一个回调。
然后,do_search
只需要了解执行查询然后运行功能即可。这使其更通用(从而可重用)。
searcher.do_search(res.query, function (data) {
res.send(...);
});
function do_search(query, callback) {
callback(...);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句