如何将回调放入express.js中的res.json

问题描述 投票:1回答:2

我需要调用异步回调函数来返回我的Express.js中的对象,但我不知道怎么做!

app.get('/first', function (req, res, next) {

res.json(//put my async callback function here ?);
});

功能:

const reqObj = () => {
  request(`isdb.pw/${url}`, function(err, res, body) {
    if (!err) {
      const $ = cheerio.load(body);
      var name = $('meta[name="description"]').attr('content');
      var story = $('meta[property="og:video:url"]').attr('content');
      return {
        name,
        story
      };
    } else {
      console.log(err);
    }
  });
};
javascript node.js express callback
2个回答
2
投票

首先,让函数返回一个Promise,然后你可以使用.then:

const reqObj = () => {
  return new Promise((resolve, reject) => {
    request(`isdb.pw/${url}`, function(err, res, body) {
      if (!err) {
        const $ = cheerio.load(body);
        var name = $('meta[name="description"]').attr('content');
        var story = $('meta[property="og:video:url"]').attr('content');
        resolve({
          name,
          story
        });
      } else {
        reject(err);
      }
    });
  });
};

之后调用异步函数并在获得数据后运行res.json()

app.get('/first', function (req, res, next) {
  reqObj().then(data => {
    res.json(data);
  }).catch(err => console.log(err)); 
});

res.json()只接受对象作为参数


这是一个带回调的解决方案

const reqObj = (callback) => { // <-- add callback parameter here
    request(`isdb.pw/${url}`, function(err, res, body) {
      if (!err) {
        const $ = cheerio.load(body);
        var name = $('meta[name="description"]').attr('content');
        var story = $('meta[property="og:video:url"]').attr('content');
        callback(null,{ // <-- call callback function without err, but with data
          name,
          story
        });
      } else {
        callback(err); // <-- call callback just with data
      }
    });
  });
};


app.get('/first', function(req, res, next) {
  reqObj((err, data) => { // <-- pass callback function
    if(err) return console.log(err) // <-- check for error
    res.json(data);
  });
});

0
投票

你从你的异步函数中放了json

const x = async () => await {some: 'value'};

response.json(x())
© www.soinside.com 2019 - 2024. All rights reserved.