это не работает внутри функций прототипа при вызове в промежуточном программном обеспечении Express [duplicate]

1

Я столкнулся с необычной ошибкой в структуре node.js express.

Я создал файл say test.js, который имеет следующий код

function a(){

}

a.prototype.b = function(){
    this.c("asdsad");
}

a.prototype.c = function(string){
    console.log("ccc"+string)
}

/*var ob = new a();
ob.b();*/

module.exports = a;

и еще один файл call_test.js

var test = require('./test');
var test_ob = new test();
test_ob.b();

когда я запускаю узел call_test.js, он дает мне правильный вывод cccasdsad

НО, когда я вызываю test.js, используя явное промежуточное ПО в файле express_test.js

var express = require("express");
var app = express();
var test = require('./test');
var test_ob = new test();

app.get('/testAPI',test_ob.b);

Я получаю ошибку this.c не является функцией, когда я нажимаю testAPI.

Можете ли вы сказать мне, почему это не работает при использовании в middlewares.

Теги:
express
this
prototype

1 ответ

0

Вызывающий контекст вашей строки app.get - это app, поэтому, когда функция b пытается запустить this.c("asdsad"); , он пытается получить доступ к app.c когда вы на самом деле пытаетесь получить доступ к test_ob.c.

При прохождении b функции app.get, свяжите b функции this значение в test_ob поэтому он будет ссылаться должным образом:

app.get('/testAPI',test_ob.b.bind(test_ob));
  • 0
    отлично, большое спасибо за это. но теперь это выглядит грязно: D вместо просто test.b

Ещё вопросы

Сообщество Overcoder
Наверх
Меню