2017-08-06 6 views
1

私はNode.js/Express.jsバックエンドで作業しています。フロントエンドでは、この方法でバックエンドAPIにオブジェクトを渡します。バックエンドapp.jsになぜ「[]」で明示的にオブジェクトの配列名を追加するのですか

var accountData = {"my_tags" : ["tag1", "tag2", "tag3"]} 
$.post("/api/submission/1", accountData, function(sucess){ 
     console.log("success"); 
    }); 

セットアップでこのよう

var app = express(); 

app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use('/', index); 
app.use('/api', api); 

その後、私のAPIの

router.post("/api/submission/:pageNumber", function (req, res) { 
    console.log(JSON.stringify(req.body)); 

プリント{ "my_tags []":[ "TAG1"、 " "tag2"、 "tag3"]}

"my_tags"オブジェクト配列の名前にNodeまたはExpressに "[]"を追加するのはなぜですか?

答えて

0

もちろん、これを書き込むことを強いると、2分後に私の投稿を読んだときに答えがうかがえる。私のURLエンコードされたボディパーサーの拡張属性がfalseに設定されているためです。私の配列のタイトルに "[]" を付加

app.use(bodyParser.urlencoded({ extended: true })); 

停止にapp.jsで

app.use(bodyParser.urlencoded({ extended: false })); 

を変更します。うまくいけば、これは他の誰かを助けるでしょう。

+1

次のドキュメントも参照してください。https://github.com/expressjs/body-parser#extended – jsalonen

+0

ありがとう! @ jsalonoen、明らかに明示的に表現するだけで、私は助けに感謝します。 –

+1

また、jQueryのデフォルトのコンテンツタイプは 'application/x-www-form-urlencoded'(http://api.jquery.com/jquery.ajax/)です。これはbodyParserで処理されることになります。これをJSONに設定すると、 'bodyParser.json()'を使って解析することができます。 – jsalonen

関連する問題