Javascript 错误[ERR_HTTP_HEADERS_SENT]:在发送到节点JS中的客户端后,无法设置头

Javascript 错误[ERR_HTTP_HEADERS_SENT]:在发送到节点JS中的客户端后,无法设置头,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在尝试使用一个特定的ID更新数据,该ID不起作用,但给出了上述错误 更新时,首先在数据库中搜索特定id,然后将数据保存到MongoDB 这是我的server.js const express = require('express'); const bodyParser = require('body-parser'); const cors = require('cors'); const mongoose = require('mongoose'); //importing MongoD

我正在尝试使用一个特定的ID更新数据,该ID不起作用,但给出了上述错误

更新时,首先在数据库中搜索特定id,然后将数据保存到
MongoDB

这是我的
server.js

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const mongoose = require('mongoose');

//importing MongoDB model schema
let ToDo = require('./todo.model');

const app = express();
const todoRoutes = express.Router();

const PORT = 4000;

//middlewares
app.use(bodyParser.json());
app.use(cors());
app.use('/todos', todoRoutes);

//connection to the MongoDB database
mongoose.connect('mongodb://127.0.0.1:27017/todos', {useNewUrlParser: true});
const connection = mongoose.connection;
connection.once('open', () =>{
    console.log("Connected to the MongoDB through port: 27017");
 });

app.listen(PORT, () => { 
    console.log(`Listening to port: ${PORT}`);
});

//get all data - removed to show only the code snippet I am getting errors

//get data by an ID - removed to show only the code snippet I am getting errors

//add items to database -removed to show only the code snippet I am getting errors

//update items
todoRoutes.route('/update/:id').post((req, res) => {
    let id = req.params.id;
    ToDo.findById(id, (err, todo) => {
        if(err) throw err;
        if(!todo) res.status(400).send("No data found");

        todo.todo_description = req.body.todo_description;
        todo.todo_responsible = req.body.todo_responsible;
        todo.todo_priority = req.body.todo_priority;
        todo.todo_completed = req.body.todo_completed;
        res.end();

        todo.save().then(todo => {
            res.json(200).send("Data Updated! " + todo);
            res.end();
        }).catch(err => {
            res.status(400).send("Error occured! " + err);
        });
    });
});
这是我得到的错误


有人能帮我吗?

'/update/:id'
路径中,您正在发送一个
res.end()
,然后在3行之后再次执行。如果删除第一个
res.end()
,它应该可以工作

如果缺少
todo
,您还应该
返回

todoRoutes.route('/update/:id').post((req, res) => {
    let id = req.params.id;
    ToDo.findById(id, (err, todo) => {
        if(err) throw err;
        if(!todo) return res.status(400).send("No data found");

        todo.todo_description = req.body.todo_description;
        todo.todo_responsible = req.body.todo_responsible;
        todo.todo_priority = req.body.todo_priority;
        todo.todo_completed = req.body.todo_completed;

        todo.save().then(todo => {
            res.status(200).send("Data Updated! " + todo);
        }).catch(err => {
            res.status(400).send("Error occured! " + err);
        });
    });
});

'/update/:id'
路径中,您将发送一个
res.end()
,然后在3行之后再次发送。如果删除第一个
res.end()
,它应该可以工作

如果缺少
todo
,您还应该
返回

todoRoutes.route('/update/:id').post((req, res) => {
    let id = req.params.id;
    ToDo.findById(id, (err, todo) => {
        if(err) throw err;
        if(!todo) return res.status(400).send("No data found");

        todo.todo_description = req.body.todo_description;
        todo.todo_responsible = req.body.todo_responsible;
        todo.todo_priority = req.body.todo_priority;
        todo.todo_completed = req.body.todo_completed;

        todo.save().then(todo => {
            res.status(200).send("Data Updated! " + todo);
        }).catch(err => {
            res.status(400).send("Error occured! " + err);
        });
    });
});

此错误通常意味着您多次发送响应

请注意,您一个接一个地发送两个响应
res.json()
res.end()

如果出于某种原因想要结束响应,请使用
res.end()
,否则使用
res.status(200).json({result:'Data updated'+todo})


如果您同时发送这两个,它会抱怨在发送响应(通过
res.status().json()
)后试图修改响应(通过
res.end()

此错误通常意味着您发送了多次响应

请注意,您一个接一个地发送两个响应
res.json()
res.end()

如果出于某种原因想要结束响应,请使用
res.end()
,否则使用
res.status(200).json({result:'Data updated'+todo})


如果两个都发送,它会抱怨在发送响应(通过
res.status().json()
)后试图修改响应(通过
res.end()

即使在注释之后,我仍然会收到错误。我在
If(!todo)
语句中添加了一个“return”。这可能是发送第一组标头的位置。如果您确定在运行更改之前已重新启动服务器,是否可以尝试?我也立即注意到了这一点@user11436513I做了额外的更改。您正在发送
res.json(200),我将其更改为
res.status(200)..
即使在注释之后,我仍然会收到错误。我在
if(!todo)
语句中添加了一个“return”。这可能是发送第一组标头的位置。如果您确定在运行更改之前已重新启动服务器,是否可以尝试?我也立即注意到了这一点@user11436513I做了额外的更改。您正在发送
res.json(200),我将其更改为
res.status(200)…
非常感谢。这就是我想要的:)非常感谢。这就是我想要的:)