req.body 使用 http 时为空 {}。 post 在 angular 和 node.js
req.body is empy {} when using http. post in angular and node.js
这是我的service.ts文件
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Items } from "./inventory.model";
import { Router } from "@angular/router";
import { environment } from "../../../environments/environment";
const BACKEND_URL = environment.APIUrl + "/Items/";
@Injectable({
providedIn: "root",
})
export class InventoryService {
constructor(private http: HttpClient, private router: Router) {}
addItem(
itemNo: string,
itemName: string,
maker: string,
unitPrize: string,
sellingPrize: string,
Qty: string
) {
const ItemData = new FormData();
ItemData.append("itemNo", itemNo);
ItemData.append("item_name", itemName);
ItemData.append("maker", maker);
ItemData.append("unitPrize", unitPrize);
ItemData.append("sellingPrize", sellingPrize);
ItemData.append("Qty", Qty);
this.http
.post<{ message: string; items: Items }>(
BACKEND_URL,
ItemData
)
.subscribe((responseData) => {
console.log(responseData);
});
}
}
这是我在后端路由中的item.js
const express = require("express");
const ItemController = require("../controllers/item");
const bodyParser = require('body-parser');
const router = express.Router();
router.post("", ItemController.savepost);
这是我在 Controller 中的 Item.js 文件
const ItemModel = require('../models/item');
exports.savepost = (req, res, next) => {
if(Object.keys(req.body).length === 0)
{
console.log(req.body);
}
const items = new ItemModel({
item_no: req.body.itemNo,
item_name: req.body.itemName,
maker: req.body.maker,
unitPrize: req.body.unitPrize,
sellingPrice: req.body.sellingPrize,
Qty: req.body.Qty,
});
console.log(items.item_no);
items.save().then(addItem => {
res.status(201).json({
message: "Item added Successfully",
items: {
...addItem,
id: addItem._id
}
});
}).catch(error => {
res.status(500).json({
message: error
})
}
);
}
这是我的物品模型
const mongoose = require('mongoose');
const itemSchema = new mongoose.Schema({
item_no: { type: String, required: true },
item_name: { type: String, required: true },
maker: { type: String, required: true },
unitPrize: { type: Number, required: true },
sellingPrice: { type: Number, required: true },
Qty: { type: Number, required: true },
});
module.exports = mongoose.model('Items',itemSchema);
响应错误显示如下消息
项目验证失败”,消息:“项目验证失败:item_no:需要路径 item_no
。,item_name:路径 item_name
需要., maker: Path maker
需要., unitPrize: Path unitPrize
需要., sellingPrice: Path sellingPrice
需要., Qty: Path Qty
需要.",
将/
放在你的路线中
router.post("/", ItemController.savepost);
在 app.js 中使用此代码,因为您不解析 req.body
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
请尝试以下代码
const ItemData = {
itemNo,
item_name,
maker,
unitPrize,
sellingPrize,
Qty
}
const headers = { 'content-type': 'application/json'}
const body=JSON.stringify(ItemData);
this.http.post<{ message: string; items: Items }>(BACKEND_URL, body,{'headers':headers}).subscribe((responseData) => {
console.log(responseData);
});
我测试了后端代码,是的,问题是关于前端代码中的post请求,你可以查看post请求docomentation
you send your Object data without parsing in JSON format. so before sending the request first convert it to a pure JSON. you can achieve this after adding this code in the app.js file.
app.use(bodyParser.json());
这是我的service.ts文件
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Items } from "./inventory.model";
import { Router } from "@angular/router";
import { environment } from "../../../environments/environment";
const BACKEND_URL = environment.APIUrl + "/Items/";
@Injectable({
providedIn: "root",
})
export class InventoryService {
constructor(private http: HttpClient, private router: Router) {}
addItem(
itemNo: string,
itemName: string,
maker: string,
unitPrize: string,
sellingPrize: string,
Qty: string
) {
const ItemData = new FormData();
ItemData.append("itemNo", itemNo);
ItemData.append("item_name", itemName);
ItemData.append("maker", maker);
ItemData.append("unitPrize", unitPrize);
ItemData.append("sellingPrize", sellingPrize);
ItemData.append("Qty", Qty);
this.http
.post<{ message: string; items: Items }>(
BACKEND_URL,
ItemData
)
.subscribe((responseData) => {
console.log(responseData);
});
}
}
这是我在后端路由中的item.js
const express = require("express");
const ItemController = require("../controllers/item");
const bodyParser = require('body-parser');
const router = express.Router();
router.post("", ItemController.savepost);
这是我在 Controller 中的 Item.js 文件
const ItemModel = require('../models/item');
exports.savepost = (req, res, next) => {
if(Object.keys(req.body).length === 0)
{
console.log(req.body);
}
const items = new ItemModel({
item_no: req.body.itemNo,
item_name: req.body.itemName,
maker: req.body.maker,
unitPrize: req.body.unitPrize,
sellingPrice: req.body.sellingPrize,
Qty: req.body.Qty,
});
console.log(items.item_no);
items.save().then(addItem => {
res.status(201).json({
message: "Item added Successfully",
items: {
...addItem,
id: addItem._id
}
});
}).catch(error => {
res.status(500).json({
message: error
})
}
);
}
这是我的物品模型
const mongoose = require('mongoose');
const itemSchema = new mongoose.Schema({
item_no: { type: String, required: true },
item_name: { type: String, required: true },
maker: { type: String, required: true },
unitPrize: { type: Number, required: true },
sellingPrice: { type: Number, required: true },
Qty: { type: Number, required: true },
});
module.exports = mongoose.model('Items',itemSchema);
响应错误显示如下消息
项目验证失败”,消息:“项目验证失败:item_no:需要路径 item_no
。,item_name:路径 item_name
需要., maker: Path maker
需要., unitPrize: Path unitPrize
需要., sellingPrice: Path sellingPrice
需要., Qty: Path Qty
需要.",
将/
放在你的路线中
router.post("/", ItemController.savepost);
在 app.js 中使用此代码,因为您不解析 req.body
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
请尝试以下代码
const ItemData = {
itemNo,
item_name,
maker,
unitPrize,
sellingPrize,
Qty
}
const headers = { 'content-type': 'application/json'}
const body=JSON.stringify(ItemData);
this.http.post<{ message: string; items: Items }>(BACKEND_URL, body,{'headers':headers}).subscribe((responseData) => {
console.log(responseData);
});
我测试了后端代码,是的,问题是关于前端代码中的post请求,你可以查看post请求docomentation
you send your Object data without parsing in JSON format. so before sending the request first convert it to a pure JSON. you can achieve this after adding this code in the app.js file.
app.use(bodyParser.json());