Вызов существующего API с использованием Express передачи json body - PullRequest
1 голос
/ 05 февраля 2020

Я новичок в NodeJs / Express. Я пытаюсь создать API, который в свою очередь вызовет существующий API, который в основном создает продукт с некоторыми изменениями. в основном API "продукты", которые я называю, использует метод POST. Что в основном предполагает передачу данных в формате JSON. Но здесь я получаю сообщение об ошибке от целевого API о том, что тело не передано.

let json = {"id": "", "name" : ""};

      app.get('/createProduct/:product_id', function (req, res) {
        let url = 'https://somewebsite/api/products'
        json.id = req.params.product_id;

        req.headers['token'] = getToken();
        req.headers['timestamp'] = getTimeStamp();
        req.body = json;

        req.pipe(request(url)).pipe(res);
      }); 

Я что-то упустил?

1 Ответ

1 голос
/ 05 февраля 2020

В этом случае вам не обязательно направлять объект req на вызов запроса, вы можете просто сделать запрос request.post, вы все равно можете передать вывод этого, я думаю, что он даст вам результат, который вы wi sh:

let json = {"id": "", "name" : ""};

app.get('/createProduct/:product_id', function (req, res) {
    let url = 'https://somewebsite/api/products';
    // Create headers for outgoing call.
    let headers = { 
        token: getToken(),
        timestamp: getTimeStamp()
    }
    // Populate the json.id value.
    json.id = req.params.product_id;
    request.post({ url, headers, body: json, json: true }).pipe(res);
});

Также для целей тестирования я предлагаю вам создать прослушиватель POST, чтобы посмотреть, что вы передаете в службу, вы можете легко сделать это в express:

app.post("/post_test", bodyParser.json(), (req, res) => {
    console.info("/post_test: headers:", req.headers);
    console.info("/post_test: body:", req.body);
    res.status(201).send("All good");
})

Чтобы использовать это, просто измените URL в вызове app.get на:

http://localhost:<port>/post_test

И не забудьте вернуться назад!

...