Node.js nodejs expressjs result.end()如果从回调调用,则不会发送POST请求的结果
我有一个express应用程序,可以处理类似以下内容的post请求(coffeescript)Node.js nodejs expressjs result.end()如果从回调调用,则不会发送POST请求的结果,node.js,asynchronous,express,Node.js,Asynchronous,Express,我有一个express应用程序,可以处理类似以下内容的post请求(coffeescript) #处理CSV上传 app.post'/upload',(请求、回复)-> res.setHeader'内容类型','文本/json' 如果!请求会话用户? res.json 成功:错 返回 如果!req.files.files?| |!req.files.files.length res.json 成功:错 消息:“未上载任何文件” 返回 file=req.files.files[0] 如果file.
#处理CSV上传
app.post'/upload',(请求、回复)->
res.setHeader'内容类型','文本/json'
如果!请求会话用户?
res.json
成功:错
返回
如果!req.files.files?| |!req.files.files.length
res.json
成功:错
消息:“未上载任何文件”
返回
file=req.files.files[0]
如果file.mime不是“text/csv”
res.json
成功:错
消息:“上传类型无效”
返回
#查找此csv中引用的所有托运人的ID
客户\托运人\ ID=[]
chainer=new Sequelize.Utils.QueryChainer
csv()
.from.stream(fs.createReadStream(file.path))
.to.path(“/tmp/tempcv.out”)
.transform((行)->
返回行
).on('记录',(行,索引)->
chainer.add DB.Order.create
po_num:Math.random()+“”
描述:Math.random()+“”
请求的\u由:“”
收到:假
状态:“已收到采购订单”
).on('结束',(计数)->
console.log“结束”
console.log计数
chainer.run().success()->
console.log“chainer fin”
res.json#但是chainer-fin
确实会被记录,对吗?@robertklep,是的,我确实看到“chainer-fin”登录到我的控制台,当你说“不返回任何东西”时,这是否意味着响应是空的?或者请求挂起,或者发出错误消息?因为从外观上看,它应该可以正常工作。是的,响应是空字符串,我用curl确认了它,我同意这很奇怪,如果您将res.json
更改为res.send
,那么如果您将res.json
放入mand(后跟return
)位于处理程序的顶部(以确保没有中间件过滤掉您的响应)。如果您在节点端没有收到错误,则尚未调用res.end()
(否则您将收到错误)。
#Handle CSV Uploads
app.post '/upload', (req, res) ->
res.setHeader 'Content-Type', 'text/json'
if !req.session.user?
res.json
success: false
return
if !req.files.files? || !req.files.files.length
res.json
success: false
message: 'No Files Uploaded'
return
file = req.files.files[0]
if file.mime is not 'text/csv'
res.json
success: false
message: 'Invalid Upload Type'
return
#Find IDs of all shippers referenced in this csv
client_shippers_ids = []
chainer = new Sequelize.Utils.QueryChainer
csv()
.from.stream(fs.createReadStream(file.path))
.to.path('/tmp/tempcsv.out')
.transform((row) ->
return row
).on('record', (row, index)->
chainer.add DB.Order.create
po_num: Math.random() + ''
description: Math.random() + ''
requested_by: ''
received: false
status: 'Purchase Order Received'
).on('end', (count)->
console.log 'end'
console.log count
chainer.run().success () ->
console.log 'chainer fin'
res.json #<----- This part does not send
success: true
message: 'complete'
)
res.json #<----- This part does not send
success: true
message: 'complete'