[英]req.body is empty, why?
我想将一些数据发送到我的 mongodb 数据库,但是在 router.post 我的 req.body 是空的,如果我使用我在用户(req.body)instade 的 req.body 数据中放入我的发送函数的东西正确到我的 mongodb 数据库
这是我使用的路由器,router.get 工作正常,它在 /api 页面上正确返回数据库表
const router = require("express").Router();
const User = require("./model/models");
const parser = require("body-parser").json();
router.get("/", async (req, res) => {
const data = await User.find({});
res.json(data);
});
router.post("/",parser,async (req, res) => {
console.log('1')
console.log(req.body)
console.log('2')
parser.v
await User(req.body).save();
res.json({"msg": "ok"});
});
module.exports = router
这是我的 index.js 文件代码
const bodyParser = require('body-parser');
const express = require('express');
const app = express();
const parser = require("body-parser").json();
var path = require('path');
app.use(express.urlencoded(true));
app.use(express.json());
app.use(parser);
app.use('/',require("./routes/routes"))
app.use(express.static(__dirname +'/public'))
app.use("/api", require('./data/api'))
app.listen(5000,function(){
console.log('server is alive')
})
这是我用来发送数据的功能
const btn1 = document.getElementById('btnEnter')
let Login = "123"
btn1.addEventListener('click' ,e=>{
send({newsTxT : "someTextHere",newsZag:"someZag",author:"SomeAuthor"})
})
const send = async(body) => {
let res = await fetch("/api", {
method: "post",
header: {
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify(body)
});
let data = await res.json();
console.log(data)
}
我认为该方法区分大小写,请尝试更改post
-> POST
我看到的唯一奇怪的事情是您正在使用json body-parser
和express.json()
两者在技术上都做同样的事情,但body-parser
已被弃用,因此它可能会导致错误。
此外,您不必在路由中再次导入它,将app.use(express.json())
放在index.js
将使其适用于所有端点/路由。
看看这个重构是如何进行的:
const router = require('express').Router()
const User = require('./model/models')
router.get('/', async (req, res) => {
const data = await User.find({})
res.json(data)
})
router.post('/', async (req, res) => {
console.log('1')
console.log(req.body)
console.log('2')
await User(req.body).save()
res.json({ 'msg': 'ok' })
})
module.exports = router
索引.js
const express = require('express')
const app = express()
var path = require('path')
app.use(express.urlencoded(true))
app.use(express.json())
app.use('/', require('./routes/routes'))
app.use(express.static(__dirname + '/public'))
app.use('/api', require('./data/api'))
app.listen(5000, function () {
console.log('server is alive')
})
以下工作正常:
const express = require("express")
const app = express()
const router = express.Router()
router.use(express.json())
app.use(router)
router.post('/api/user', function(req, res) {
// ...
}
我看到不同之处可能是使用: app.use(router)
注意上面代码中的语句:
router.use(express.json())
可以替换为(使用body-parser
):
const bodyParser = require('body-parser')
router.use(bodyParser.json())
这工作得很好用express
版本4.17.1, body-parser
版本1.19.0和NodeJS
版本12.18.3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.