gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:58 26 4
gpt4 key购买 nike

我试图解决 Node 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()

但是主代码给出了错误,我理解这是因为应用程序对象已经超出范围,因为请求处理程序可能已经返回。

/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()

关于node.js - 快速请求处理程序中的 q-io/fs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33080832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com