Node.js 快速请求处理程序中的q-io/fs

Node.js 快速请求处理程序中的q-io/fs,node.js,express,q,Node.js,Express,Q,我正在尝试解决NodeJS中的一个编程问题,该问题需要一个rad文件。 使用qio的正确方法是什么 这是我的节目 var express = require('express') var qfs = require('q-io/fs') var q = require('q') var fs = require('fs') var app = express() app.get('/books', function(req, res){ qfs.read(process.argv[3])

我正在尝试解决NodeJS中的一个编程问题,该问题需要一个rad文件。 使用qio的正确方法是什么

这是我的节目

var express = require('express')
var qfs = require('q-io/fs')
var q = require('q')
var fs = require('fs')
var app = express()
app.get('/books', function(req, res){
  qfs.read(process.argv[3])
  // .then( function(buf){res.json(JSON.parse(buf))})
  // .done()
 .then(res.send).done()
 /*  .then(null, function(abc, err){
            res.json(err)
            console.log("Error handler")
            res.status(500)
          })*/
  })
 app.listen(process.argv[2])
我知道我可以同步读取文件,下面的代码也可以工作

qfs.read(process.argv[3])
.then( function(buf){res.json(JSON.parse(buf))})
.done()
但是主代码给出了错误,我理解这是因为app对象已超出范围,因为请求处理程序可能已经返回

/home/ubuntu/mahesh/node_tries/node_modules/q/q.js:155
                throw e;
                      ^
TypeError: Cannot read property 'req' of undefined
    at send (/home/ubuntu/mahesh/node_tries/node_modules/express/lib/response.js:103:17)
    at _fulfilled (/home/ubuntu/mahesh/node_tries/node_modules/q/q.js:834:54)
    at self.promiseDispatch.done (/home/ubuntu/mahesh/node_tries/node_modules/q/q.js:863:30)
    at Promise.promise.promiseDispatch (/home/ubuntu/mahesh/node_tries/node_modules/q/q.js:796:13)
    at /home/ubuntu/mahesh/node_tries/node_modules/q/q.js:604:44
    at runSingle (/home/ubuntu/mahesh/node_tries/node_modules/q/q.js:137:13)
    at flush (/home/ubuntu/mahesh/node_tries/node_modules/q/q.js:125:13)

这里发生了什么事??调用res.end时,express.js的处理程序在什么时候返回?

有点晚了,但我自己偶然发现了这个问题,希望将来能帮助遇到这个问题的人

在response.js中,程序失败的那一行是:

var req = this.req;
调用res.send()时,函数send将在res的上下文中调用(因此“this”是res),this.req是请求对象

但是,当您将函数作为变量传递给promise时,它就失去了上下文,变成了一个函数。因此,当调用它时,“this”未定义,this.req成为错误。因此,要解决您的问题,请替换

.then(res.send).done()

.then(books => res.send(books)).done()