繁体   English   中英

在路由器脚本中读取 json 请求节点 js

[英]read json request node js in router script

大家好,我已经尝试了很多方法来获取来自 postman 的请求正文到我的脚本中,但是正文总是空的,你能不能帮我把它弄好

我已经在 index.js 中创建了服务器,当我尝试从中读取请求正文时工作正常这里是一个示例,这是索引脚本

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));

输入 postman 输入输出 postman 索引

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

输出 postmna userRouter

你的代码是正确的,你的问题是关于 postman 因为你的 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'
}

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

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

按照我的顺序试试这个

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

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

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

    console.log(req.body);

  });

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

你用的是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;

暂无
暂无

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

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