代码之家  ›  专栏  ›  技术社区  ›  Shivang Agarwal

无法获取对象值并在类中定义常量和静态变量

  •  0
  • Shivang Agarwal  · 技术社区  · 7 年前

    'use strict';
    
    const Request = require('request');
    
    class CryptoKetHandlers {
    
        static async coins(ctx) {
            try {
                var CONTENT_TYPE = 'application/json';
                console.log(`## Hitting cryptoket coins api for coins list ...`);
                var res = await Request.get({
                    url: 'https://api.cryptoket.io/info/currencies',
                    headers: {
                        'Content-Type': CONTENT_TYPE,
                    }
                }, (err, res, body) => {
                    //console.log(`Inside response ... res: ${res} err: ${err} body: ${body}`);
                    if (err) {
                        console.log(`#### ERROR :: API RESP :: CryptoKetHandlers :: coins :: exception :: ${err}`);
                        ctx.throw(500);
                    } else {
                        let res = {};
                        res.body = body;
                        res.status = 200;
                        return res;
                    }
                });
            } catch (ex) {
                console.log(`#### ERROR :: CryptoKetHandlers :: coins :: exception :: ${ex}`);
                ctx.throw(500);
            }
            console.log(`######### Final Response :: status - ${res.status} body - ${res.body} res :: ${res}`);
            ctx.body = res;
            ctx.status = 200;
        }
    
    }
    
    module.exports = CryptoKetHandlers;
    

    我来自Java背景,是koa&nodejs的新手,所以想知道如何实现以下目标:

    1. 为什么res.status和res.body总是返回undefined?
    2. 如何将内容类型声明为类变量应为const&static?

    • 从Request.get和
      在其他地方(在另一个类函数中)处理它。

      • 使所有可重用的变量类成为级别,这样就不需要再次定义。

    我尝试了各种各样的方式,通过谷歌搜索,但没有成功,所以问这里。

    提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Sridhar An Nguyen    7 年前
    1. 为什么res.status和res.body总是返回undefined?

    Request.get() 应该返回 Promise 为…工作 await

    await表达式会导致异步函数执行暂停,直到实现或拒绝的承诺得到解决,并在实现后恢复异步函数的执行。 当重新开始时,等待表达的价值就是履行承诺的价值。

    res 和另一个一起 物件 (err, res, body) => {} . 相反,我们可以将返回值作为普通对象返回。

    做出这些改变,

    'use strict';
    
    let request = require('request');
    
    const CONTENT_TYPE = 'application/json';
    
    function makeRequest() {
      return new Promise((resolve, reject) => {
        request.get({
          url: 'https://api.cryptoket.io/info/currencies',
          headers: {
            'Content-Type': CONTENT_TYPE,
          }
        }, (err, res, body) => {
          if (err) {
            console.log(`#### ERROR :: API RESP :: CryptoKetHandlers :: coins :: exception :: ${err}`);
            return reject(err);
          }
    
          // return as object
          return resolve({ 
            body: body,
            status: 200
          });
        });
      });
    }
    
    class CryptoKetHandlers {
    
      static async coins(ctx) {
        try {
          console.log(`## Hitting cryptoket coins api for coins list ...`);
          let res = await makeRequest();
          console.log(`######### Final Response :: status - ${res.status} body - ${res.body} res :: ${res}`);
        } catch (ex) {
          console.log(`#### ERROR :: CryptoKetHandlers :: coins :: exception :: ${ex}`);
        }
      }
    
    }
    

    自从我换了 var 具有 let . 我已经把最后一次登录移到了 try 封锁。

    1. 如何将内容类型声明为类变量应为const&static?

    这方面的提议正在进行中。你可以查一下 ES6 class variable alternatives