gpt4 book ai didi

node.js - Express.js 路由错误 : Can't set headers after they are sent

转载 作者:IT老高 更新时间:2023-10-28 22:05:49 25 4
gpt4 key购买 nike

我不确定为什么会收到此错误。这是一个基于 express.js 构建的简单 API,能够添加和删除帖子。当我触发删除路由器时发生错误。我读过这个错误通常发生在有两个回调时,但是,我似乎找不到任何双重回调。

    _http_outgoing.js:344
throw new Error('Can\'t set headers after they are sent.');
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11)
at ServerResponse.header (/Users/bounty/Projects/_learning/react-express/node_modules/express/lib/response.js:718:10)
at ServerResponse.send (/Users/bounty/Projects/_learning/react-express/node_modules/express/lib/response.js:163:12)
at ServerResponse.json (/Users/bounty/Projects/_learning/react-express/node_modules/express/lib/response.js:249:15)
at /Users/bounty/Projects/_learning/react-express/server/routes/posts.js:86:9
at nextTickCallbackWith0Args (node.js:452:9)
at process._tickCallback (node.js:381:13)

这是我的 posts.js 路由器:

module.exports = function(router) {

var Post = require('../models/post.js');

// middleware for the api requests
router.use(function(req, res, next) {
// do logging
console.log('something is happening.');
next(); // make sure we go to our next route and don't stop here
});

// test route to make sure everything is working (accessed at GET http://localhost:8080/api)

router.get('/', function(req, res) {
res.json({ message: 'hooray! welcome to our api!' });
});

// all routes here

// routes that end in /posts
router.route('/posts')

// create a Post (accessed at POST http://localhost:7777/api/posts)
.post(function(req, res) {
var post = new Post();
post.postTitle = req.body.postTitle; // set the post name (comes from request)

// save post and check for errors
post.save(function(err) {
if (err)
res.send();

res.json({ message: 'post created!' });
});
})

// get all Posts (accessed at GET http://localhost:7777/api/posts)
.get(function(req, res) {
Post.find(function(err, posts) {
if (err)
res.send();

res.json(posts);
});
});

// routes that end in /posts for specific id
router.route('/posts/:post_id')

// get the post with that id
.get(function(req, res) {
Post.findById(req.params.post_id, function(err, post) {
if (err)
res.send(err);

res.json(post);
});
})

// update the post with that id
.put(function(req, res) {
Post.findById(req.params.post_id, function(err, post) {
if (err)
res.send(err);

post.postTitle = req.body.postTitle;

// save the post
post.save(function(err) {
if (err)
res.send(err);

res.json({ message: 'post updated!' });
});
});
})

// deletes the post with that id
.delete(function(req, res) {
Post.remove({
_id: req.params.post_id
}, function(err, post) {
if (err) {
res.send(err);
}
res.json({ message: 'post deleted!' });
});
});
}

最佳答案

你需要添加'return',这样你就不会回复两次了。

// save post and check for errors
post.save(function(err) {
if (err) {
return res.send();
}
res.json({ message: 'post created!' });
});

关于node.js - Express.js 路由错误 : Can't set headers after they are sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34983520/

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