expressjs server.js这是未定义的,我怎么能引用服务器

时间:2018-10-16 15:57:28

标签: javascript node.js express this

在ExpressJS设置中,我在server.js中执行以下操作:

import { call_method } from '../hereIam.mjs';

const process_db = async () => {
  console.log(this); // undefined
  call_method(this);
};

console.log(this) // undefined
process_db();

然后,我要从hereIam.mjs调用父方法,但这是未定义的

export const call_method = parent_this => console.log(parent_this); // undefined 

我试图在server.js中包含类,以试图强制使用this

class AppServer {
 constructor() {
   console.log(this)
 }

 const process_db = async () => call_method(this);
}

但是似乎类内的箭头函数未在(实验性的)NodeJS中编译(这应该是另一个问题)

已编辑

如何做到这一点,是避免使用箭头表示法以便能够在Express中使用类,然后实例化一个提供this的类。

class AppServer {
 async process_db() {call_method(this)};
}

let server = new AppServer();
server.process_db();

问题将是,获取this引用的唯一方法是使用对象/类?

1 个答案:

答案 0 :(得分:1)

您可以使用bind方法并传递任何对象作为this上下文。

但是,箭头函数从调用它们的上下文中接收上下文,function() {}函数语法使用由它们定义在其中的上下文隐式绑定到它们的上下文,或者使用此 bind显式地绑定到它们。 方法。

因此,使用类的替代方法是将一个简单的对象绑定到该方法,例如:

const call_method = require('../hereIam.mjs');

const process_db = async function() {
  console.log(this); 
  call_method(this);
};

console.log(this);

const context = {
    name: 'bound context',
    parent_method: async function() {
        console.log('Good evening');
    }
}

process_db.bind(context)();

假设hereIam.mjs包含:

module.exports = parent_this => console.log(parent_this);

然后脚本将输出:

{}
{ name: 'bound context',
  parent_method: [AsyncFunction: parent_method] }
{ name: 'bound context',
  parent_method: [AsyncFunction: parent_method] }