Node.js/Express.js 将 POST 请求转发到另一个域

2024-03-06

我的 express.js 应用程序在域上有一条路由example1.com:

router.post('/messages/add', (req, res) => {
  let message = new Message();
  message.title = req.body.title;
  message.body = req.body.body;
  message.save(err => {
    if(err) {
      return res.json({ success: false });
    } else {
      return res.json({ success: false });
    }
  });
});

如何将消息传递到域上另一个 Express 应用程序的端点example2.com?

UPDATE

使用更新了代码request https://github.com/request/request#forms模块建议者YouneL https://stackoverflow.com/a/48604043/5861479. example2.com接收一个空对象:

UPDATE 2

终于成功了。不得不放form:formData代替formData:formData in the request.post()选项。

服务器/域 1:

router.post('/messages/add', function (req, res) {
  let formData = {
    title: req.body.title,
    body: req.body.body
  }

  request.post({
    url:'http://example2.com/api/messages/add',
    form:formData}, function optionalCallback(err, httpResponse, body) {
      if (err) {
        return console.error('upload failed:', err);
      }
      console.log('Upload successful!  Server responded with:', body);
    });
});

服务器/域2:

router.post('/contacts/add', function (req, res) {
    let message = new Message(); // Mongoose model
    message.title = req.body.title;
    message.body = req.body.body;        

    req.checkBody('title', 'Title is required').notEmpty();
    req.checkBody('body', 'Body is required').notEmpty();
    let errors = req.validationErrors();
    if (errors) {
        res.json({ success: false, msg: errors });
    } else {
        contact.save(function (err) {
            if (err) {
                console.log(err);
                res.json({ success: false, msg: 'Failed to add message' });
            } else {
                res.json({ success: true, msg: 'Message added' });                  
            }
        });
    }
});

你可以使用request https://github.com/request/request#forms发送另一个 post 请求的模块example2.com,这是一个例子:

router.post('/messages/add', (req, res) => {

    let message = new Message();
    message.title = req.body.title;
    message.body = req.body.body;
    message.save(err => {

        if (err) {
            return res.json({ success: false });
        }

        // post data to example2.com
        request.post({ url:'example2.com', form: req.body }, (err, httpResponse, body) => { 

            if (err) {
                return res.json({ success: false, msg: 'cannot post to example2.com' });
            }

            res.json({ success: true });

        });


    });

});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js/Express.js 将 POST 请求转发到另一个域 的相关文章

随机推荐