简体   繁体   English

POST上的404 for nodejs / express应用

[英]404 on POST for nodejs/express app

I've been following a tutorial online, but modifying it for my own project. 我一直在关注在线教程,但是针对我自己的项目对其进行了修改。 Get requests to api/posts work fine, but Post requests lead to 404 and 'Error: Can't set headers after they are sent.'. 获取对api / post的请求可以正常工作,但是Post请求导致404和“错误:发送请求后无法设置标头”。 I can't work out why this is. 我不知道为什么会这样。

'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}`)
})

I've gone through the express documentation, but can't find a solution. 我已经阅读了快速文档,但是找不到解决方案。 Any help would be appreciated. 任何帮助,将不胜感激。

Your server could send 2 http response, if an error occurred on the save method, I think that's why you get Can't set headers after they are sent. 您的服务器可以发送2个http响应,如果在save方法上发生错误,我认为这就是为什么您Can't set headers after they are sent.收到Can't set headers after they are sent.的原因Can't set headers after they are sent. , try to use return statement to stop the remaining code from executing or use else clause: ,请尝试使用return语句停止执行其余代码或使用else子句:

post.save(function(err) {
    if (err) {
        return res.json({ success: false, error: err.message });
    }

    res.json({ message: 'Post added!'});
});

This might do the trick! 这可能会成功!

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!'});
        });
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM