JSON входит в неопределенный, где потеряны данные? - PullRequest
0 голосов
/ 11 июля 2019

Я использую почтальон для тестирования API отдыха, который я создаю для проекта. Я пытаюсь отправить некоторые данные в метод post, но эти данные теряются где-то между почтальоном и конечной точкой.

Я попытался отследить данные с помощью журналов консоли, но ничего не вышло (req.body не определено). Я почти уверен, что проблема не в конечной точке или маршрутизаторе, поскольку в почтальоне возникает та же ошибка, что и в консоли моей IDE, что означает, что существует какая-то связь.

// json I'm putting into postman. validated with Jsonlint.com
{
    "Name": "testN",
    "file": "file1",
    "Path": "/home/userf",
    "userName": "user1"
}

// profileWrite.js
 const dbProfileWrite = require('../...db-ProfileWrite');
 const bodyParser = require('body-parser');
 var app = express();
 app.use(bodyParser.json());

// my post method 
async function post(req, res, next) {
    try {
        console.log("attempting to parse data: " + req.body);
        let profile = req.body;
        console.log("data parsed, writing profiles");
        profile= await dbProfileWrite.writeProfile(profile);
        res.status(201).json(profile);
    } catch (err) {
        next(err);
    }
}
module.exports.post = post;

ОБНОВЛЕНИЕ 7/15/19 : Я воссоздал микроверсию своего проекта, в котором эта проблема возникла при работе со стеком. есть какая-то ошибка пакета, над которой я работаю, но вот ссылка . Я воссоздал методологию, которую я использую в своем проекте с роутером, и все и посмотрел на пример в экспресс-документации. надеюсь, это поможет изолировать проблему. Когда я отправляю в этот API-интерфейс через почтальона, данные все еще остаются неопределенными, так что помогает гораздо меньшее представление всего проекта.

Ответы [ 3 ]

1 голос
/ 12 июля 2019

Вам больше не нужен body-parser, он был возвращен в ядро ​​express в форме express.json, просто используйте app.use(express.json()).

Для доступа к телу вашего запроса используйтеТребуется, чтобы он имел объект с ключами, представляющими отправленный json;



 var app = express();
 app.use(express.json());


async function post(req, res, next) {
    try {
        console.log("attempting to parse data: " + req.body);
        let profile = req.body; // no need to use any functions to parse it
        console.log("data parsed, writing profiles");
        profile= await dbProfileWrite.writeProfile(profile);
        res.status(201).json(profile);
        console.log("profilecreated");
    } catch (err) {
        next(err);
    }
}

См. документацию по экспрессу

1 голос
/ 11 июля 2019

Предполагается, что вы используете Express Framework, с помощью функции post.Вам нужно использовать функцию промежуточного белья для обработки тела запроса, используя body-parser .Убедитесь, что вы используете правильный парсер в этом случае

app.use(bodyParser.json())
0 голосов
/ 15 июля 2019

Решил проблему сам с небольшой помощью Джона Шмитца.Проблема заключалась в том, что я определял маршрутизатор и сервер перед тем, как на самом деле рассказывать ему, как обрабатывать тела / объекты json, поэтому тело было задано как неопределенное по умолчанию.В моем index.js следующее исправило код:

        app.use(express.urlencoded({ extended: true }));
        app.use(express.json());
        app.use('/api/v1', router);

ключом к этому является то, что приложению сказано использовать json и express.urlencoded до объявления маршрутизатора.эти действия должны происходить в этом порядке, и все до app.listen вызывается.Когда приложение прослушивает, все его параметры устанавливаются, и вы не можете их изменить.Tl; dr: node ОЧЕНЬ требователен, и вы ДОЛЖНЫ определить эти вещи в нужном месте.Спасибо всем за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...