npm express无法从后端请求对象
问题描述:
我跟着this教程,并创建了一个前端/后端侧角的应用程序。npm express无法从后端请求对象
我想通过对后端的其余调用与json进行通信。前端和后端正在工作,我可以从后端调用方法。
在前端我发送一个英雄对象到后端,但在后端,body.hero对象是未定义的。
前端:
update(hero: Hero): Promise<Hero> {
const url = `${this.heroesUrl}/hero/update/${hero.id}`;
console.info('update url: '+url);
return this.http.put(url, JSON.stringify(hero), {headers: this.headers})
.toPromise()
.then(() => hero).catch(this.handleError);
}
后端:
router.put('/heroes/hero/update/:id', (req, res) => {
let id = req.params.id; // 12
let z = req.body.params;
console.info("body: "+z);
let name = JSON.parse(req.body.hero).name;
console.info("saving hero: "+name+" with id: "+id);
client.query("update heroes set heroname=$2 where id_pk=$1)", [h, name]);
res.send(JSON.stringify("ok"));
});
例外:
body: [object Object]
SyntaxError: Unexpected token u in JSON at position 0
at Object.parse (native)
at router.put (C:\Users\Magamet\Documents\GitHub\angular-start-app\server\routes\api.js:64:19)
at Layer.handle [as handle_request] (C:\Users\Magamet\Documents\GitHub\angular-start-app\node_modules\express\lib\ro
uter\layer.js:95:5)
at next (C:\Users\Magamet\Documents\GitHub\angular-start-app\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\Magamet\Documents\GitHub\angular-start-app\node_modules\express\lib\router\route.js:112:
3)
at Layer.handle [as handle_request] (C:\Users\Magamet\Documents\GitHub\angular-start-app\node_modules\express\lib\ro
uter\layer.js:95:5)
at C:\Users\Magamet\Documents\GitHub\angular-start-app\node_modules\express\lib\router\index.js:281:22
at param (C:\Users\Magamet\Documents\GitHub\angular-start-app\node_modules\express\lib\router\index.js:354:14)
at param (C:\Users\Magamet\Documents\GitHub\angular-start-app\node_modules\express\lib\router\index.js:365:14)
at Function.process_params (C:\Users\Magamet\Documents\GitHub\angular-start-app\node_modules\express\lib\router\inde
x.js:410:3)
我在做什么错?有没有更好的方法发送英雄obj后端在json?我怎么能读到后端的英雄对象?
谢谢
答
看来你的英雄对象发送一个JSON字符串到后端,这意味着req.body.hero已经由路由器解析。这意味着您正在解析已解析的JSON字符串。你只需要访问它像任何其他JS对象:
let name = req.body.hero.name;
但随后说'类型错误:无法读取的undefined' – ninjaxelite
属性“名”你需要身体的解析器? – Josherwoodev
我不是,但我添加了这个:const bodyParser = require('body-parser') const app = express() app.use(bodyParser.urlencoded({extended:false})) app.use (bodyParser.json())''但它仍然不会像以前一样运行相同的错误 – ninjaxelite