最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

从异步节点模块到单独模块的Node API接收结果

运维笔记admin14浏览0评论

从异步节点模块到单独模块的Node API接收结果

从异步节点模块到单独模块的Node API接收结果

我花了很长时间试图获取API调用的结果,以传递给另一个节点模块的AIP请求。我有一个搜索序列名称并返回该序列名称及其ID的模块。我有另一个节点模块,可以从我的前端表单接受搜索查询。我希望webAPI.js模块将搜索请求传递给thetvdb.js模块,然后将结果发送回最初调用它的webapi.js函数。

到目前为止,我所能获得的只是返回未定义或未决承诺的结果。但是无论我做什么,webAPI.js中返回结果的console.log总是不带信息返回,然后我的thetvdb.js中的console.log将返回我想要的结果。

thetvdb.js

require('dotenv').config();
const fs = require('fs');
const request = require('node-fetch');
const requestURL = require('request');
const bodyParser = require('body-parser');

let scanLocation = 'downloads/'

// The TVDB
const TheTVDB_URL = '';
const TVDB_KEY = process.env.TVDB_API_KEY;
const TVDB_API_VERSION = 'v2.1.1';
const TVDB_AV_HEADER = `application/vnd.thetvdb.${TVDB_API_VERSION}`;
const TVDB = require('node-tvdb');
const tvdb = new TVDB(TVDB_KEY);

exports.getSeriesNameAPI = function (seriesName) {
  let results = [];
  tvdb.getSeriesByName(seriesName)
    .then(response => {
      for (let i = 0; i < response.length; i++) {
        let series = {
          name: response[i].seriesName,
          id: response[i].id
        }
        results.push(series);
        // console.log('name:', response[i].seriesName, 'ID:', response[i].id);
      };
      console.log('TVDB Raw:', JSON.stringify(results));
      return JSON.stringify(results);
    })
    .catch(error => { throw (error) });
};

webAPI.js

require('dotenv').config();
const fs = require('fs');
const express = require('express');
const https = require('https');
const async = require('async');
const fetch = require('node-fetch');
const superagent = require('superagent')
const Router = express.Router;
const bodyParser = require('body-parser').json();

const TVDBapi = require('./thetvdb.js');
// const app = express();

const webAPI = new Router();

webAPI.route('/search/:search').get((req, res) => {
  // console.log('WebAPI Results: ', TVDBapi.getSeriesNameAPI(req.params.search));

  Promise.resolve(TVDBapi.getSeriesNameAPI(req.params.search)).then(response => {
    console.log(response);
  })

  // async function getSearchResults(req){
  //   let response = await TVDBapi.getSeriesNameAPI(req.params.search)
  //   let data = await response
  //   while(data === undefined){
  //     if(data === undefined){
  //       console.log('async is worthless')
  //       // await res.send(JSON.stringify({'async':'worthless'}))
  //     } else {
  //       console.log('I cant belive it actually worked!')
  //       await console.log('inside Async:', data);
  //       await res.send(JSON.stringify(data));
  //     }
  //   // searchResults = data;

  // }
  // getSearchResults(req);
  // console.log('WebAPI Results: ', getSearchResults(req));

  // res.send(JSON.stringify(getSearchResults(req)));
  // res.send(JSON.stringify(searchResults));


  // console.log('WebAPI Results:', fetch(TVDBapi.getSeriesNameAPI(req.params.search)));

  // let results = TVDBapi.getSeriesNameAPI(req.params.search).then(console.log('WebAPI results:', results));

  // async function init(req) {
  //   let results = await TVDBapi.getSeriesNameAPI(req.params.search)

  //   console.log('WebAPI results:', results);
  // }
  // init(req);

  // async.series(TVDBapi.getSeriesNameAPI(req.params.search), function (err, result) {
  //   /* this code will run after all calls finished the job or
  //      when any of the calls passes an error */
  //   if (err) { return console.log(err) };
  //   console.log('async result:', result);
  // });

  // return new Promise((resolve, reject) => {
  //   const error = false;

  //   if(!error){
  //     console.log(TVDBapi.getSeriesNameAPI(req.params.search));
  //     resolve()
  //   } else {
  //     reject('response borked')
  //   }
  // })

});

module.exports = webAPI;

最后,我想将搜索结果返回到前端Web界面。但是我得到的是不确定的。

回答如下:

thetvdb.js

exports.getSeriesNameAPI = function (seriesName) { let results = []; // return Promise return tvdb.getSeriesByName(seriesName) .then(response => { for (let i = 0; i < response.length; i++) { let series = { name: response[i].seriesName, id: response[i].id } results.push(series); // console.log('name:', response[i].seriesName, 'ID:', response[i].id); }; console.log('TVDB Raw:', JSON.stringify(results)); return results; }) .catch(error => { throw (error) }); };

webAPI.js

require('dotenv').config(); const fs = require('fs'); const express = require('express'); const https = require('https'); const async = require('async'); const fetch = require('node-fetch'); const superagent = require('superagent') const Router = express.Router; const bodyParser = require('body-parser').json(); const TVDBapi = require('./thetvdb.js'); // const app = express(); const webAPI = new Router(); webAPI.route('/search/:search').get( async (req, res) => { // console.log('WebAPI Results: ', TVDBapi.getSeriesNameAPI(req.params.search)); try{ //await promise resolve const response = await TVDBapi.getSeriesNameAPI(req.params.search); res.json(response) } catch (err) { res.json({result:'falure'}) } })

发布评论

评论列表(0)

  1. 暂无评论