【问题标题】:read json request node js in router script在路由器脚本中读取json请求节点js
【发布时间】:2021-05-28 16:28:54
【问题描述】:

大家好,我已经尝试了很多方法来将邮递员的请求正文放入我的脚本中,但正文总是空的,你能帮我把它弄好吗

我已经在 index.js 中创建了服务器,当我尝试从中读取请求正文时工作正常 这是一个例子 this is the index script

const express =require('express');
const mongoose=require('mongoose');
const app=express();
require('dotenv').config();
const ConnectDB=require("./config/db");

app.use(express.json());
app.use(express.urlencoded({extended:false}));

ConnectDB()

app.use('/api/users',require('./routes/usersRouter.js'))

app.post('/test',(req,res)=>{
res.json(req.body)
})

const port=process.env.PORT||3000;
app.listen(port,()=>console.log("server start on "+port));

在邮递员中输入 in-output postman index

const express =require('express');
const mongoose=require('mongoose');
const router =express.Router();

router.use(express.json());
router.use(express.urlencoded({extended:false}));

 //signup Route
 router.get('/signup',(req , res) => {

    console.log(req.body);

  });

module.exports=router;

这是我里面的路由器脚本我无法阅读请求的正文我尝试了很多不同的方法但没有锻炼 usersRouter js

in-output postmna userRouter

【问题讨论】:

  • 虽然图片可以抵得上一千个单词,但对于代码而言,情况并非如此。请在您的问题中发布实际代码,而不是图片
  • 只是邮递员没在失眠工作正常

标签: javascript node.js json express body-parser


【解决方案1】:

要让 express 处理body,您需要指定router.post('/signup', ...) 而不是get。如果您同时处理来自同一路由的get 和post 请求,则可以使用router.all('/signup', ...)。 更多信息可以在docs of express找到

【讨论】:

    【解决方案2】:

    你的代码是正确的,你的问题是关于邮递员的,因为你的 req.headers 不是这样的:

    {
      'content-type': 'application/json',
      'user-agent': 'PostmanRuntime/7.26.8',
      accept: '*/*',
      'postman-token': '06924678-2c5e-4e14-93da-50a16ca06c20',
      host: '127.0.0.1:6060',
      'accept-encoding': 'gzip, deflate, br',
      connection: 'keep-alive',
      'content-length': '28'
    }
    

    请卸载并重新安装邮递员,但您的代码中存在一些问题, 从 router.js 中删除此行, 当req.body 中有数据时,请使用post 请求

    const bodyParser = require("body-parser");
    router.use(bodyParser.urlencoded({ extended: true }));
    router.use(bodyParser.json());
    

    【讨论】:

    • 你不应该在路由器中使用正文解析器
    • 是的,我试过了,但我把它弄空了也是同样的问题
    • 你的代码是正确的,再检查一下,我测试了你的代码,和图片中的代码不同的是在问题中添加了代码,singup是get request还是post request??更新了你的快递
    【解决方案3】:

    按照我的顺序试试这个

    app.use(express.urlencoded({ extended: true }));
    app.use(express.json());
    

    还将/signup 上的请求方法转换为post,因为当您提出注册请求时,您发布的详细信息没有得到

     router.post('/signup',(req , res) => {
    
        console.log(req.body);
    
      });
    

    【讨论】:

      【解决方案4】:

      您使用的是 express 4 吗?它是内置的 express 4。因此,第一个文件中的 app.use(express.json()) 应该可以正常工作。 App.use 表示您正在注册中间件以读取 json 正文请求,它只需要声明一次并在您的路由文件中,您无需再次使用它。您可以尝试像这样更改您的 userRoute.js:

      const express =require('express');
      const mongoose=require('mongoose');
      const router =express.Router();
      
      // i think you don't need this
      // router.use(express.json());
      // router.use(express.urlencoded({extended:false}));
      
       //signup Route
       router.get('/signup',(req , res) => {
      
          console.log(req.body);
      
        });
      // change this line below
      // module.exports=router;
      // to
      export default router;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-24
        • 1970-01-01
        • 2020-03-27
        • 2015-09-15
        • 2023-01-29
        • 1970-01-01
        相关资源
        最近更新 更多