【问题标题】:Cannot POST to Express router (404 error)无法 POST 到 Express 路由器(404 错误)
【发布时间】:2020-10-07 15:53:24
【问题描述】:

我无法获取到我的 Express 路由器的 POST 请求。我有许多可以正常工作的 GET 请求,但这是我的第一个 POST 请求,它不起作用。

我的前端代码如下所示:

export async function postHamster(name, age) {
try {
    await fetch('/hamsters/api/new-hamster',
        {
            method: 'POST',
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({
                name: name,
                age: age
            })
        })
    console.log("postHamster has run") //LOGGED
}
catch (e) {
    console.error(e)
}

}

响应总是:

fetchData.js:38 POST http://localhost:3000/hamsters/api/new-hamster 404 (Not Found)

我已经对路径进行了三次检查,它不会出错。后端路径为“hamsters.js”文件中的“router.get('api/new-hamster', async(req, res)...”。

我还将后端函数放在文件的最顶部,以确保它不会被文件中的任何其他函数覆盖。

这是我的 server.js:

    // THIS FIRST FUNCTION I JUST COPIED FROM A SOLUTION BUT IT DOES NOT SEEM TO HELP
// routes/index.js
module.exports = (express) => {
  // Create express Router
  var router = express.Router();

  // add routes
  server.route('/hamsters/api/new-hamster')
    .post((req, res) => {
       res.setHeader('Content-Type', 'application/json');
       res.send('You sent: sdadad to Express');
    });

  return router;
}

const express = require('express');
const server = express();
const serverPort = process.env.PORT || 1234;

server.use(express.static(__dirname + '/../build'))

let data = require('./data.json')
const { Router } = require('express');
let router = new Router();

//USE BODY-PARSER BEFORE REGISTERING ROUTES!
const bodyParser = require('body-parser')
server.use(bodyParser.urlencoded({ extended: true }));
server.use(bodyParser.json())

server.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
  });

// ROUTES
const hamstersRoute = require('./routes/hamsters');
const chartsRoute = require('./routes/charts')
const gamesRoute = require('./routes/games')
const statsRoute = require('./routes/stats')
const imagesRoute = require('./routes/images')
const uploadRoute = require('./routes/upload')
    

server.use('/assets', express.static("assets"))
server.use(express.static('public'))

server.use('/hamsters', hamstersRoute)
server.use('/charts', chartsRoute)
server.use('/games', gamesRoute)
server.use('/stats', statsRoute)
server.use('/images', imagesRoute)
server.use('/upload', uploadRoute)

server.listen(serverPort, () => {
    console.log(`Server is up n running on port ${serverPort}!`)
})

module.exports = data;

我看过这些帖子:

Cannot GET/POST with express Router() Express.js routers post request returns 404 Express: router cannot read POST request

【问题讨论】:

    标签: javascript express post routes fetch


    【解决方案1】:

    你有这个:

    server.use(bodyParser.urlencoded({ extended: true }));
    

    而不是这个:

    server.use(bodyParser.urlencoded({ extended: false }));
    

    【讨论】:

      【解决方案2】:

      您是否在控制台的网络选项卡中检查了您尝试发布到的网址?我认为您需要在后端路由中的 api 之前添加 / : router.get('/api/new-hamster', async (req, res)...".

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-14
        • 2021-07-28
        • 1970-01-01
        • 1970-01-01
        • 2016-07-13
        • 2018-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多