javascript - 错误: Can't set headers after they are sent NodeJs 4

标签 javascript node.js

我创建了一个小项目。我刚刚添加了一个参数控件,但如果我不发送 id 我会收到此错误。问题出在哪里?

Error: Can't set headers after they are sent

const Express = require('express');
const BodyParser = require('body-parser');
const app = Express();

app.use(BodyParser.json());
app.use(BodyParser.urlencoded({extended: false}));

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
    res.header('Access-Control-Allow-Methods', 'POST');
    if ('OPTIONS' == req.method) {
        res.header('Access-Control-Allow-Methods', 'POST');
        return res.send(200);
    }
    next();
});

app.get('/', (req, res) => {
    res.write('Test');
    res.end();
});

app.post("/test", (req, res) => {
    if (!req.body.id) {
        res.send(200).json({code: 400, message: 'error'});
        return;
    }
})

server = app.listen(8000);

最佳答案

您只需删除.end()。根据文档(https://expressjs.com/en/api.html#res.end):

Use to quickly end the response without any data. If you need to respond with data, instead use methods such as res.send() and res.json().

基本上,当您调用 .json() 时,它会发送响应 header ,然后调用 end() 再次发送它们

关于javascript - 错误: Can't set headers after they are sent NodeJs 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56157295/

相关文章:

javascript - JS 测试中间件正在返回 next()

javascript - 如何使用 Angular 在同一函数中进行多个 http 调用

javascript - Codility 中标志的 80% Javascript 解决方案

javascript - 如果函数遮盖了元素,如何正确处理鼠标悬停?

AngularJS - 工厂未定义?

node.js - 成功登录后Azure身份验证返回登录页面-node.js

node.js - Alexa 技能 : is it possible to pause and resume the skill programmatically?

javascript - 传递给 setInterval 的函数范围

Node.js:express.json限制白名单

javascript - Webpack 相当于已包含模块的 browserify shiming(global)