簡體   English   中英

POST上的404 for nodejs / express應用

[英]404 on POST for nodejs/express app

我一直在關注在線教程,但是針對我自己的項目對其進行了修改。 獲取對api / post的請求可以正常工作,但是Post請求導致404和“錯誤:發送請求后無法設置標頭”。 我不知道為什么會這樣。

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

我已經閱讀了快速文檔,但是找不到解決方案。 任何幫助,將不勝感激。

您的服務器可以發送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. ,請嘗試使用return語句停止執行其余代碼或使用else子句:

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

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

這可能會成功!

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