Node.js和Express:如何在asynchronous操作之后返回响应

我是Node.js的新手,所以我仍然围绕着asynchronous函数和callback。 我现在正在努力的是如何在asynchronous操作中读取文件中的数据之后返回响应。

我的理解是,发送回应是这样的(这对我有用):

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_searchasynchronous完成的。 而且我不能在callback到do_search调用它,因为res对象不在那里。

有人可以帮我理解在Node.js中处理这个问题的正确方法吗?

要访问不同函数中的variables,当没有共享作用域时,将其作为parameter passing。

您可以通过res然后访问这两个querysend函数内的一个variables。


为了分离担忧的目的,你可能会更好的传递callback。

然后, do_search只需要知道执行一个查询,然后运行一个函数。 这使得它更通用(从而可重用)。

 searcher.do_search(res.query, function (data) { res.send(...); }); function do_search(query, callback) { callback(...); }