Node - Express将数组转换为“Object”Map

时间:2018-02-05 15:10:45

标签: javascript node.js express post vue.js

我使用node express为后端创建了一个Web应用程序,并为前端创建了vue。 现在我发布一个对象来表达,使用jquery(我知道它将在以后切换),它包含一个数组。当阵列命中快速路由器时,它会将对象中的数组转换为映射。如果我在控制台中打印对象,它似乎仍然是一个数组,但当express得到它时,它是一个地图。任何人都知道导致此问题的原因,或者有关如何解决此问题的想法?

index.vue

test(){
    // testing why express is mapping maps 
    const body = {
        user_id:0,
        user_name:'',
        user_email:'',
        user_projects:[{test:'test'}]
    }
    console.log(body)
    $.post('/MyApp/api/users/createUser',body)
    .done((data)=> console.log(data))
    .fail((err) => console.log(err))
}, 

快递

router.post('/users/createUser', async(req, res, next) => {
    console.log('/users/createUser'); 
    console.log(JSON.stringify(req.body)); 
    res.json(req.body); 
});

控制台

// front end
index.vue ? 223 bf930 : 222
{
    user_id: 0
    , user_name: ""
    , user_email: ""
    , user_projects: Array(1)
}
user_email: ""
user_id: 0 user_name: ""
user_projects: Array(1) 0: {
    test: "test"
}
length: 1 __proto__: Array(0) __proto__: Object

// Express Response
index.vue ? 223 bf930 : 229 
{
    user_id: "0"
    , user_name: ""
    , user_email: ""
    , user_projects[0][test]: "test"
}
user_email: ""
user_id: "0"
user_name: ""
user_projects[0][test]: "test"
__proto__: Object

解决方案, 这是我发送数据的方式。

    $.ajax({
        url: '/MyApp/api/users/createUser',
        method: 'POST',
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(body)
    })

1 个答案:

答案 0 :(得分:0)

问题是您将数据作为查询字符串发送,但您需要的是json。解析包含数组的查询字符串将返回一个对象而不是一个数组。

您只需要将json数据类型添加到$.post

所以试试这个

$.post('/MyApp/api/users/createUser',body, 'json')