Я столкнулся с необычной ошибкой в структуре 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.
Вызывающий контекст вашей строки 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));