サーバ側Node ソース
Node.js
1onst bodyParser = require('body-parser'); 2const express = require('express'); 3const app = express(); 4app.use(bodyParser.json()); 5app.use(express.static(__dirname + '/static')); 6app.post('/test', async (req, res) => { 7 console.log(JSON.stringify(req)); 8}); 9
クライアント側
Javascript(jQuery)
1$.ajax({ 2 url: 'http://localhost/test', 3 type: 'POST', 4 data: { id: '12345' }, 5 dataType: 'json', 6 contentType: 'application/json', 7 });
これを実行すると、サーバ側で以下のエラーが発生します。
error
1SyntaxError: Unexpected token b in JSON at position 0 2 at JSON.parse (<anonymous>) 3 at createStrictSyntaxError (C:\Program Files (x86)\Nodist\bin\node_modules\body-parser\lib\types\json.js:158:10) 4 at parse (C:\Program Files (x86)\Nodist\bin\node_modules\body-parser\lib\types\json.js:83:15) 5 at C:\Program Files (x86)\Nodist\bin\node_modules\body-parser\lib\read.js:121:18 6 at invokeCallback (C:\Program Files (x86)\Nodist\bin\node_modules\body-parser\node_modules\raw-body\index.js:224:16) 7 at done (C:\Program Files (x86)\Nodist\bin\node_modules\body-parser\node_modules\raw-body\index.js:213:7) 8 at IncomingMessage.onEnd (C:\Program Files (x86)\Nodist\bin\node_modules\body-parser\node_modules\raw-body\index.js:273:7) 9 at IncomingMessage.emit (events.js:203:15) 10 at endReadableNT (_stream_readable.js:1145:12) 11 at process._tickCallback (internal/process/next_tick.js:63:19)
ちなみに、これが出る前にいろいろいじりまわしており、動作していることがあったのですが、console.log(req.body.id ) であっても値を取得することができませんでした。
ちなみに、Chrome Talend API Tester でリクエストしたり、URL?id=12345 の形式でPOSTすれば正常動作しました。
この違いがどのように作用しているのか、お分かりになる方にご教示いただきたいです。
bodyParser.json()でパースすべきJSONのbodyはどこでしょうか?
bodyParser.json()が詳細に何をしているか、具体的な理解はしていないことをまずお話しておきます。
リクエストされたJSONをパースしていると想像していますが、ここでエラーが発生しているのでしょうか?
だとしたら、何か記載漏れがあるということでしょうか。
あるいは、POSTされた要求に対してレスポンスする処理が console.log しかなく、返却すべき値がないことを指摘しているのでしょうか。
本件の主題は、リクエストが到達しないことであるため、レスポンスについては質問内容の対象外としているため、console.log のみを処理に記載しています。
ご質問の意図について再確認させてください。
答えになっているかわかりませんが、まずは記載させていただきました。
> 本件の主題は、リクエストが到達しないことであるため
いえ、「到達している」からbody-parserでエラーが発生しています。前提が誤りです。
回答3件
あなたの回答
tips
プレビュー