【发布时间】:2019-02-03 13:22:31
【问题描述】:
我有这个代码:
app.post('/pst', function(req, res) {
var data = req.body.convo;
res.render('waiting.ejs'); //ADDED THIS
myFunc(data).then(result => {
res.render('success.ejs'); //THEN THIS
//---------------------------------
//clever way to send text file to client from the memory of the server
var fileContents = Buffer.from(result, 'ascii');
var readStream = new stream.PassThrough();
readStream.end(fileContents);
res.set('Content-disposition', 'attachment; filename=' + fileName);
res.set('Content-Type', 'text/plain');
readStream.pipe(res);
//--------------------------------------
}).catch( .....
我想做的是当有 POST 时, 1.抓取帖子信息 2. 做一个 res.render() 3. 以帖子信息为参数运行一个函数 4. 执行此代码 sn-p 将允许客户端从内存中下载内容为 .txt 文件 5. 再做一个 res.render()
如果我们排除两个 res.render(),一切正常。在我做一个之后,我无法设置标题。我收到此错误。
Error: Can't set headers after they are sent.
所以我想到了一个潜在的解决方案。
是否有可能 app.post() 会获取 post 数据并执行 res.render()。
然后,返回post数据,所以另一部分代码将处理以该数据作为参数调用函数,然后进行头部操作,最后进行最后的res.render()。
请记住,这是 routes.js 文件。
【问题讨论】:
-
res 函数应该始终是您调用的最后一个函数。你不能有多个
res.render()s。 -
这就是为什么我问我是否只在这里做一个 res.render,但我将发布数据发送到其他地方进行处理,在那里我可以做另一个。
-
您在该代码的哪一部分发送要处理的数据?
-
myFunc(data).then(result .data 是来自 POST 的数据,myFunc 是一个异步函数。
-
是的,但你仍然渲染到相同的
res
标签: javascript node.js express routes header