使用异步 Node.JS 处理 HTTP 请求

Dmi*_* B. 6 node.js

我已经成功编写了一些 Nodejs HTTP 处理程序来提供数据以响应 HTTP 请求。但是,我编写的所有内容都使用 *Sync 版本的函数。我现在很快就遇到了这种方法的局限性。

但是,我不知道如何在 HTTP 请求上下文中正确使用异步函数。如果我尝试异步调用,处理很快就会失败并返回,而不会给代码处理数据的机会。

正确的做法是什么?我还没有找到任何好的例子,所以任何有关文献的指示都值得赞赏。除此之外,还有一个 GET 请求处理程序的示例,该请求扫描本地目录,然后返回文件名和相应行数的 json 列表(或者实际上是上述显示正确技术的任何存根代码) 。

Pet*_*ons 4

这是一个简单的示例:

var http = require('http')
var fs = require('fs')

function dir (req, res) {
  fs.readdir('.', function (error, files) {
    if (error) {
      res.writeHead(500)
      res.end(error.message)
      return
    }
    files.forEach(function (file) {
      res.write(file + '\n')
    })
    res.end()
  })
}

var server = http.createServer(dir)
server.listen(7000)
Run Code Online (Sandbox Code Playgroud)

运行node server.js并测试它curl :7000

是的,请求处理程序在执行 readdir 回调之前返回。这是设计使然。这就是异步编程的工作原理。没关系。当文件系统 IO 完成时,将执行回调并发送响应。