【问题标题】:Express JS route with POST request returns 404 Cannot GET error in Postman带有 POST 请求的 Express JS 路由在 Postman 中返回 404 Cannot GET 错误
【发布时间】:2021-10-27 16:09:27
【问题描述】:

我正在使用 express 和 body-parser 在 Nodejs 中创建 API。我能够使用邮递员成功发出 GET 请求,但是在使用 POST 请求时它总是抛出错误 404 not found Cannot GET /

  • 快捷版:@4.17.1
  • 正文解析器版本:@1.19.0

请检查下面的代码

server.js 文件

require('dotenv').config();
const express = require("express");
const http = require("http");

var addRequestId = require('express-request-id')();
const requestIp = require('request-ip');
const cron = require("node-cron");
const cluster = require('cluster');
const os = require('os');
const v1 = require('./routes/v1');
const jobs = require('./routes/jobs/sync_job');
const bodyParser = require("body-parser");

// Check if current process is master.
if (cluster.isMaster) {

  // Get total CPU cores.
  const cpuCount = os.cpus().length;

  // Spawn a worker for every core.
  for (let j = 0; j < cpuCount; j++) {
    cluster.fork();
  }



  var port = parseInt(3000);
  var app = express();

  var server = http.createServer(app);
  app.use(addRequestId);
  app.use(requestIp.mw())
  app.use(bodyParser.json({limit: '50mb'}));
  app.use(bodyParser.urlencoded({limit: '50mb', extended: false}));
  server.listen(port, () => { })
  console.log("SERVER UP AND RUNNING");

  app.use('/v1/jp', require('./routes/report_center'));



}


cluster.on('exit', function (worker) {
  console.log(`Worker ${worker.id} died'`);
  console.log(`Staring a new one...`);
  cluster.fork();
});

report_center.js

const moment = require('moment');
const express = require('express');
const bodyParser = require("body-parser");
const reports = express.Router();

const mysql = require('mysql');
const async = require("async");
const constants = require('./v1/constant.js');
var _ = require('lodash');


var pool = mysql.createPool({
    connectionLimit: 1000,
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_DBNAME,
    charset: process.env.DB_CHARSET,
    timezone: 'UTC' + '05:30'
});

/*########################
Middleware  Starts
#########################*/

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

reports.use(function (req, res, next) {
    console.log(req.url)
    pool.getConnection(function (err, con) {
        if (err) {

            res.send(JSON.stringify({
                "error_status": true,
                "error": constants.err_desc.error_409,
                "message": constants.customMessage.DB_CON_FAILED
            }))
        } else {

            var queryTofindClient = mysql.format(`select * from client where api_key = ? LIMIT 1;`, [req.headers['api_key']]);

            console.log(queryTofindClient)
            con.query(queryTofindClient, (err, queryTofindClient_res) => {
                if (err) {

                    res.send(JSON.stringify({
                        "error_status": true,
                        "error": constants.err_desc.error_500,
                        "message": constants.customMessage.QUERY_FAILED
                    }))
                } else {

                    if (queryTofindClient_res.length == 0) {
                        res.send(JSON.stringify({
                            "error_status": true,
                            "error": constants.err_desc.error_401,
                            "message": constants.customMessage.UNAUTHORISED
                        }))
                    } else {

                        res.setHeader("Access-Control-Allow-Origin", "*");
                        res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS,');
                        res.setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept,x-access-token');
                        res.setHeader('Access-Control-Allow-Credentials', true);
                        res.setHeader('Content-Type', 'application/json');
                        next();

                    }
                }
            })
        }
        con.release();
    })

})

/*########################
Middleware  ENDS
#########################*/



reports.get("/get_api", function (req, res) {
    console.log(req.body);
    res.send('Ok');
});

reports.post("/post_api", function (req, res) {
    console.log(req.body);
    res.send('Ok');
});


module.exports = reports;

截图错误如下

【问题讨论】:

  • 能否在问题代码中添加错误信息?
  • @ApoorvaChikara 请检查编辑
  • 如果你取出你的reports.use(....中间件会发生什么?

标签: javascript node.js express body-parser


【解决方案1】:

在挣扎了两天之后,发现了一个被称为邮递员的罪魁祸首,他用不同的发件人姓名递送我的信件,我的意思是它只是将所有方法路由到 GET 类型。

屏幕截图中的以下设置默认关闭。

我只是希望它能帮助那些不值得沮丧的人,而不是像我这样节省时间的人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-10
    • 2021-07-14
    • 1970-01-01
    • 2021-07-24
    • 2016-07-13
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多