我刚接触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
对象作为参数传递到函数中,要么使其可以传递一个函数作为参数,然后在工作完成时调用它(即创建自己的回调函数)。后者可能更好,因为它不会将您的代码与 Express 的 API 耦合。 - Joe Clay