在Node.js和module.export中的类中调用本地方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Node.js和module.export中的类中调用本地方法相关的知识,希望对你有一定的参考价值。

所以我有一个具有函数的类,其中一个依赖于另一个。此类与模块一起导出。根据我能找到的任何东西,我应该能够使用“this”但是会抛出错误。

例:

class Test{

  test(){
    console.log('hello');
  }

  dependentMethod(){
    this.test();
  }
}

module.exports = Test;

但是,这会在节点中抛出这些错误:

(node:69278) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'test' of undefined
(node:69278) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:69278) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Cannot read property 'test' of undefined

如果我把这个函数放在课外,它会正常工作。谁能解释为什么这会失败? :)

编辑:

这是使用该类的server.js(示例简化)中的代码:

const test = require(__dirname + '/server/Test');


const validator = async function(req, res, next){

    const test = new test();
    const serverTest = await test.dependentMethod();
    next();

};

app.get('/Response/:id/:is/:userId/:hash', validator, async function (req, res, next) {
   //does smth
}

单独使用也不起作用

const test = new Test();

app.get('/Response/:id/:is/:userId/:hash', Test.dependentMethod, async function (req, res, next) {
     //Same error
}
答案

按预期工作。

看看这里。你只需要纠正一些语法错误。

Test.js

class Test{

  test(){
    console.log('hello');
  }

  dependentMethod(){
    this.test();
  }
}

module.exports = Test;

Test1.js

const fileR = require('./Test.js');

const validator = async function(){

 const fr = new fileR();
 const serverTest = await fr.dependentMethod();

};

validator();

输出:

> hello
另一答案

伙计,你没有向我们展示真实的代码。

我觉得在现实生活中你使用test.dependentMethod作为中间件。它很容易使用独立功能来消除上下文。这就是为什么你有一个错误Cannot read property 'test' of undefined

解决方案是使用test.dependentMethod.bind(test)或编辑部分中的代码,您可以在其中创建单独的验证器函数并正确使用类实例。

以上是关于在Node.js和module.export中的类中调用本地方法的主要内容,如果未能解决你的问题,请参考以下文章

Node.js module export async function

如何等待module.export函数完成请求,然后再将其返回值分配给不同JS文件中的变量[重复]

如何在将 module.export 中的路由保留在不同文件中的同时提供 html、css 和 js?现在只提供 html

module.export 正在导出对象而不是存储在变量中的字符串

Nodejs的模块化

正确导出 node.js 中的类以在其他所需文件中扩展它们[重复]