nodejs 请求正文未定义
nodejs request body undefined
我有一个客户端 angular 应用程序向节点 js 服务器发送 POST
请求。
order(market: string, price: string, side: string, size: string): Observable<any> {
var payload = { market: market, order: { price: price, side: side, size: size } };
return this.http.post<any>('http://localhost:3000' + "/orders", JSON.stringify(payload))
.pipe(
tap((res: any) => {
console.log(res);
}),
retry(3), // retry a failed request up to 3 times
catchError(this.handleError) // then handle the error
);
}
带有快速生成器的 nodejs:
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var cors = require('cors');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
var corsOptions = {
origin: 'http://localhost:4200',
optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}
app.use(cors(corsOptions))
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.post('/orders', (req, res) => {
console.log(req.body)
});
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
angular 应用程序可以访问 nodejs 应用程序中的方法
app.post('/orders', (req, res) => {
console.log(req.body)
});
但 req.body
未定义。我是不是做错了什么?
您需要使用body-parser, which is ExpressJS middleware that lets you parse your POST requests. This is a fairly well documented problem, you can also find a similar S/O question here
我觉得你的后端代码不错。
我认为问题是由前端代码引起的。具体通过这一行:
this.http.post<any>('http://localhost:3000' + "/orders", JSON.stringify(payload))
不要将您发送到后端的数据字符串化。像这样更改它:
this.http.post<any>('http://localhost:3000' + "/orders", payload)
我有一个客户端 angular 应用程序向节点 js 服务器发送 POST
请求。
order(market: string, price: string, side: string, size: string): Observable<any> {
var payload = { market: market, order: { price: price, side: side, size: size } };
return this.http.post<any>('http://localhost:3000' + "/orders", JSON.stringify(payload))
.pipe(
tap((res: any) => {
console.log(res);
}),
retry(3), // retry a failed request up to 3 times
catchError(this.handleError) // then handle the error
);
}
带有快速生成器的 nodejs:
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var cors = require('cors');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
var corsOptions = {
origin: 'http://localhost:4200',
optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}
app.use(cors(corsOptions))
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.post('/orders', (req, res) => {
console.log(req.body)
});
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
angular 应用程序可以访问 nodejs 应用程序中的方法
app.post('/orders', (req, res) => {
console.log(req.body)
});
但 req.body
未定义。我是不是做错了什么?
您需要使用body-parser, which is ExpressJS middleware that lets you parse your POST requests. This is a fairly well documented problem, you can also find a similar S/O question here
我觉得你的后端代码不错。 我认为问题是由前端代码引起的。具体通过这一行:
this.http.post<any>('http://localhost:3000' + "/orders", JSON.stringify(payload))
不要将您发送到后端的数据字符串化。像这样更改它:
this.http.post<any>('http://localhost:3000' + "/orders", payload)