expressjs server.js это не определено, как я могу обратиться к серверу - PullRequest
0 голосов
/ 16 октября 2018

В настройках 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 (это должен быть другой вопрос)

EDITED

Как я могу это сделать, избегая обозначения стрелками, чтобы иметь возможность использовать классы внутри Express, изатем создать экземпляр класса, который предоставляет this.

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

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

. Вопрос: единственный способ получить ссылку this - использование объектов / классов?

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете использовать метод bind и проходить через любой объект, который будет использоваться в качестве контекста this.

Однако функции-стрелки получают контекст из того, что они вызываютfrom, 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] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...