javascript - req.body 是空的,为什么?
问题描述
我想将一些数据发送到我的 MongoDB 数据库,但是在 router.post 中,我的 req.body 是空的,如果我使用放入我的发送函数User(req.body)
而不是req.body data
将正确发送到我的 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)
}
解决方案
我看到的唯一奇怪的事情是您正在使用 ajson body-parser
并且express.json()
两者在技术上都做同样的事情,但body-parser
已被弃用,因此它可能会导致错误。
此外,您不必在路由中再次导入它,放置app.use(express.json())
atindex.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
index.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')
})
推荐阅读
- c# - 将 ImageSource 转换为 Object 引发二进制流错误
- excel - DataGrip 将表值复制到 Excel 错误
- mongodb - 将带有 eval 的字符串插入 mongodb 时出现参考错误
- angular - 在定义的元素上遇到切片问题
- sql - 根据特定标准提取员工记录
- json - json.Decode 不解码数字
- python - Python 命名参数范围令人困惑,当它具有默认列表值时
- sql - 在 Oracle SQL 中查找重复项
- javascript - 如何使用 React Native(GeoFirestore)从 Firestore 获取附近的查询/餐厅
- python - 如何将熊猫数据框导出到 Teradata 表中