2017-10-16 43 views
0

我跟着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?我怎么能读到后端的英雄对象?

谢谢

回答

1

看来你的英雄对象发送一个JSON字符串到后端,这意味着req.body.hero已经由路由器解析。这意味着您正在解析已解析的JSON字符串。你只需要访问它像任何其他JS对象:

let name = req.body.hero.name; 
+0

但随后说'类型错误:无法读取的undefined' – ninjaxelite

+0

属性“名”你需要身体的解析器? – Josherwoodev

+0

我不是,但我添加了这个:const bodyParser = require('body-parser') const app = express() app.use(bodyParser.urlencoded({extended:false})) app.use (bodyParser.json())''但它仍然不会像以前一样运行相同的错误 – ninjaxelite