Формат объекта Node.js + body-parser изменяется при достижении серверной части

Я пытаюсь отправить объект внутри другого объекта из интерфейса React в серверную часть Node / express, используя jquery ajax. Проблема с данными, получаемыми сервером, больше не похоже на синтаксис объекта. Вместо этого это выглядит примерно так:

{ 'data[name]': 'test name',
  'data[size][height]': '123',
  'data[size][weight]': '50' }

Вот внешний вызов ajax ...

lendItem(){
    let id = "5af3348742afc60ab71d7d80"

    $.ajax({
        url: '/api/items/' + id,
        method: 'put',
        data: {
            'data': {
                name: "test name",
                size: {
                    height: 123,
                    weight: 50
                }
            }
        },
        success: (res) => {console.info(res)}
    });

}

внутренний сервер ...

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

// connect to mongodb
mongoose.connect('mongodb://localhost/promedical');
mongoose.Promise = global.Promise;

const app = express();
const port = process.env.PORT || 5000;

// parsing data that was received
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// initialize routes
app.use('/api', require('./routes/api'));

// error handling
app.use((err, req, res, next)=>{
    res.status(422).send({error: err.message});
});


app.listen(port, () => {
    console.info(`Listening on port ${port}`)
});

... а вот и интересующий меня маршрут.

router.put('/items/:id', (req, res, next)=>{
    console.info(req.body);
    res.send("success");
});

Я думаю, эта проблема может иметь какое-то отношение к парсеру тела. Можно ли отправлять объекты внутри объекта через jquery ajax и сохранять его форму после достижения бэкэнда? Если нет, следует ли мне просто отправить все данные внутри одного объекта, а затем проанализировать их на бэкэнде?

Я не понимаю вашу проблему, вы хотите создать объект с другим объектом внутри, это? И синтаксис, который вы используете, не удовлетворяет то, что вы хотите? Содержание этой ссылки вам не помогает? stackoverflow.com/questions/1068189/…

Chance 16.05.2018 18:48

Вы пробовали добавить dataType: 'json', и contentType: "application/json" в свой объект ajax?

Intervalia 16.05.2018 19:29

Я хочу взять эти данные во внешнем интерфейсе, отправить их в бэкэнд, а затем сохранить в базе данных Mongodb в формате json. Однако, когда данные поступают на серверную часть, они больше не соответствуют обычному синтаксису json. Вместо этого по какой-то причине у него есть квадратные скобки. Если я попытаюсь сохранить данные в базе данных в таком виде, это не сработает. В базу данных ничего не сохраняется. Мне было интересно, есть ли способ сохранить исходный формат json при отправке объектов внутри другого объекта через ajas.

Joel1 17.05.2018 19:42
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
3
30
1

Ответы 1

Оказывается, объект с именем «данные» становится строкой после того, как бэкэнд принял вызов ajax. Есть ли способ предотвратить это? Мне нужно сохранить этот объект в базе данных как объект, а не как строку.

Другие вопросы по теме