q-io/fs 在快速请求处理程序中
q-io/fs in express request handler
我试图解决节点 js 中需要 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()
但主要代码出错,我理解这是因为应用程序对象超出范围,因为请求处理程序可能已经 returned。
/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 return 的处理程序在什么时候执行?
有点晚了,但我自己偶然发现了这个问题,想帮助以后遇到这个问题的人。
您的程序在 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()
我试图解决节点 js 中需要 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()
但主要代码出错,我理解这是因为应用程序对象超出范围,因为请求处理程序可能已经 returned。
/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 return 的处理程序在什么时候执行?
有点晚了,但我自己偶然发现了这个问题,想帮助以后遇到这个问题的人。
您的程序在 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()