我一直在线学习教程,但是为我自己的项目修改它。获取api / post的请求工作正常,但发布请求会导致404和“错误:发送后无法设置标头。”#39;。我无法理解为什么会这样。
'use strict'
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const Post = require('./models/post_schema');
const app = express();
const router = express.Router();
const port = process.env.API_PORT || 3000;
mongoose.connect('mongodb://REDACTED');
app.use(bodyParser.urlencoded({extend: true}));
app.use(bodyParser.json());
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Credentials', 'true');
res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT,DELETE');
res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers');
res.setHeader('Cache-Control', 'no-cache');
next();
});
router.get('/', function(req, res) {
res.json({ message: 'API Initlialised'});
});
router.route('/posts')
.get(function(req, res) {
Post.find(function(err, posts) {
if (err) {res.send(err)}
res.json(posts)
})
})
.post(function(req, res) {
const post = new Post();
post.title = req.body.title;
post.text = req.body.text;
post.save(function(err) {
if (err) {res.send(err)};
res.json({ message: 'Post added!'});
});
});
app.use('/api', router);
app.listen(port, function() {
console.log(`api running on port ${port}`)
})
我已经通过快速文档,但无法找到解决方案。任何帮助将不胜感激。
答案 0 :(得分:2)
您的服务器可以发送2个http响应,如果save
方法发生错误,我认为这就是Can't set headers after they are sent.
的原因,请尝试使用return
语句停止执行剩余代码或使用else
子句:
post.save(function(err) {
if (err) {
return res.json({ success: false, error: err.message });
}
res.json({ message: 'Post added!'});
});
答案 1 :(得分:2)
这可能会成功!
router.route('/posts')
.get(function(req, res) {
Post.find(function(err, posts) {
if (err) return res.send(err);
return res.json(posts)
})
})
.post(function(req, res) {
const post = new Post();
post.title = req.body.title;
post.text = req.body.text;
post.save(function(err) {
if (err) return res.send(err);
return res.json({ message: 'Post added!'});
});
});