Node.js &引用;无法读取属性';名称';“未定义”的定义;失眠的POST-JSON方法
我用它来测试我的项目API(比如一个邮递员)程序,当我使用GET方法时,所有方法都不会出现问题,但是POST方法返回未定义的Node.js &引用;无法读取属性';名称';“未定义”的定义;失眠的POST-JSON方法,node.js,json,post,insomnia,Node.js,Json,Post,Insomnia,我用它来测试我的项目API(比如一个邮递员)程序,当我使用GET方法时,所有方法都不会出现问题,但是POST方法返回未定义的req.body.name和req.body.price, 这是我抓住的,这是我的要求 这是我的app.js const express = require('express'); const app = express(); const morgan = require('morgan'); const mongoose = require('mongoose'); r
req.body.name
和req.body.price
,
这是我抓住的,这是我的要求
这是我的app.js
const express = require('express');
const app = express();
const morgan = require('morgan');
const mongoose = require('mongoose');
require('dotenv').config()
mongoose.connect(`mongodb+srv://vadim:${process.env.MONGO_ATLAS_PS}@cluster0-abuqs.mongodb.net/shop`, {
useNewUrlParser: true,
useUnifiedTopology: true
});
const productRoutes = require('./api/routes/
app.use(morgan('dev'));
app.use('/products', productRoutes);
module.exports = app;
这是我的产品路由器.js
const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const Product = require('../models/product')
router.post("/", (req, res, next) => {
console.log(JSON.stringify(req.body))
const product = new Product({
_id: new mongoose.Types.ObjectId(),
name: req.body.name,
price: req.body.price
});
product
.save()
.then(result => {
console.log(result);
res.status(201).json({
message: "Handling POST requests to /products",
createdProduct: result
});
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
});
product.js的定义和模型
const mongoose = require('mongoose');
const productSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: String,
price: Number
});
module.exports = mongoose.model('Product', productSchema);
您需要使用主体解析器使用express的POST方法捕获数据 首先,您需要安装它:
npm install body-parser --save
然后在代码中:
const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const Product = require('../models/product');
const bodyParser = require('body-parser');
express.use(bodyParser.json());
express.post("/", (req, res, next) => {
console.log(JSON.stringify(req.body))
const product = new Product({
_id: new mongoose.Types.ObjectId(),
name: req.body.name,
price: req.body.price
});
//The rest of your code
});
有关它的更多信息,请参见。您确定api收到了实际的POST请求吗?您可以通过查看morgan日志来确定这一点。另外,我可以推荐使用
主体解析器
插件,这使得使用JSON主体更加容易,痛苦更少。看看它:)是的,你是对的express.use(bodyParser.json())
帮助了我,但我认为主体解析器
现在替换为useNewUrlParser:true
我错了?这是express的mongodb问题。您需要在mongo配置中添加useNewUrlParser。检查此线程中的答案:检查plz my app.js我在我的mongoose.connect中使用的useNewUrlParser
,但它不起作用,我认为mongo会过早地将数据添加到数据库中。您需要在连接后添加.then()
,然后调用路由以确保连接成功,然后再继续。