2017-10-16 3 views
0

私はのチュートリアルに続き、フロントエンド/バックエンド側に角度の付いたアプリケーションを作成しました。npmはバックエンドで要求からオブジェクトを取得できません

バックエンドへの残りの呼び出しによって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) 

をしていますか? jsonでヒーローobjをバックエンドに送るより良い方法はありますか?バックエンド側のヒーローオブジェクトをどうすれば読むことができますか?

はありがとう

答えて

1

それはあなたのヒーローオブジェクトがreq.body.heroがすでにルータによって解析されることを意味し、バックエンドにJSON文字列として送信されているようです。つまり、すでに解析されたJSON文字列を解析しています。あなただけの必要なjsの他のオブジェクトと同じようにアクセスします。

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

をしかし、それは 'TypeError例外は言う:undefined' – ninjaxelite

+0

のプロパティ「name」を読み取ることができませんあなたは身体-パーサを必要としていますか? – Josherwoodev

+0

私はそうではありませんでしたが、これを追加しました: 'const bodyParser = require( 'body-parser') const app = express() app.use(bodyParser.urlencoded({extended:false})) app.use (bodyParser.json()) 'を実行しても、以前と同じエラーが発生しません – ninjaxelite

関連する問題