2017-08-06 52 views
1

我正在使用Node.js/Express.js后端。在前端,我以这种方式将对象传递给我的后端API。为什么使用“[]”快速附加对象数组名称

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

在后端app.js是设置这样

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 []”: “标签1”,“ tag2“,”tag3“]}

为什么Node或Express将”[]“附加到”my_tags“对象数组的名称?

回答

0

当然,当我重读我的文章时,强迫自己写这篇文章让我在2分钟后得出答案。原来是因为我的url编码body解析器的扩展属性被设置为false。更改

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

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

停止附加 “[]” 我的数组冠军。希望这会帮助别人。

+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

相关问题