запрос JS узла.post callback не стреляет

Я пытаюсь отправить некоторые данные JSON из приложения node js в другой веб-сервис, написанный в Flask. Я пытаюсь использовать библиотеку запросов и посмотрел вопросы здесь и здесь .

На основе примеров я придумал следующее простое приложение. Приложение отправляет данные JSON на сервер my flask, но не получает/запускает обратный вызов. Я проверил, что приложение Flask возвращает некоторые данные через postman, и это работает хорошо.
Где я ошибаюсь?

[это все мое приложение.js]

  var express = require("express");
  var request = require('request');
  var app = express();

  app.set('view engine', 'pug');
  app.get('/', function(req, res) {
    console.log("here...")
      request({
          url: 'http://localhost:5000/receive_user_response',
          method: "POST",
          headers: {
              "content-type": "application/json"
          },
          json: {  // <--- I have also tried calling this as "body" 
              user_id: "some id...",
              user_info: "some info..."
          },
        function(err, res, data) {
            console.log('err', err) // <---- never prints any thing from here!
            console.log('res', res)
            console.log('data', data)
              if (!err && res.statusCode == 200) {
                  console.log(data);
              }
          }
    })
    console.log("here...done..")
  });

  var server = app.listen(3000, function() {
      console.log("Listening on port %s...", server.address().port);
  });

2 ответа

  1. Это не совсем ответ, но я могу заставить его работать, используя запрос-обещание вместо запроса.

    var express = require("express");
    var app = express();
    var rp = require('request-promise');
    
    var options = {
        method: 'POST',
        uri: 'http://localhost:5000/receive_user_response',
        body: {
            some: 'payload'
        },
        json: true // Automatically stringifies the body to JSON
    };
    
    app.set('view engine', 'pug');
    app.get('/', function(req, res) {
    
        rp(options).then(function(res) {
            console.log(res);
    
        }).catch(function(err) {
            console.log("error!");
        });
    
    });
    
    var server = app.listen(3000, function() {
        console.log("Listening on port %s...", server.address().port);
    });
    
  2. Функция обратного вызова должна быть вторым параметром requestфункции. Вы случайно помещаете его в объект json. Сработает следующее.

    request({
        url: 'http://localhost:5000/receive_user_response',
        method: "POST",
        headers: {
          "content-type": "application/json"
        },
        json: {  // <--- I have also tried calling this as "body" 
          user_id: "some id...",
          user_info: "some info..."
        }
      },
      function(err, res, data) {
        console.log('err', err) // <---- never prints any thing from here!
        console.log('res', res)
        console.log('data', data)
        if (!err && res.statusCode == 200) {
          console.log(data);
        }
      }
    )
    

    Но это определенно лучше читать.

    let options = {
      url: 'http://localhost:5000/receive_user_response',
      method: "POST",
      headers: {
        "content-type": "application/json"
      },
      json: {  // <--- I have also tried calling this as "body" 
        user_id: "some id...",
        user_info: "some info..."
      }
    };
    
    
    request(options,
      function(err, res, data) {
        console.log('err', err) // <---- never prints any thing from here!
        console.log('res', res)
        console.log('data', data)
          if (!err && res.statusCode == 200) {
            console.log(data);
          }
      }
    )