我在node.js表达框架中遇到一个奇怪的错误。
我创建了一个文件说 test.js ,其中包含以下代码
import axios from 'axios'
import store from './store'
const instance = axios.create({
baseURL: window.location.origin + '/api',
timeout: 10000,
params: {}
});
if (!store.state.synced)
axios.interceptors.request.use(config => {
const token = localStorage.getItem('token') || sessionStorage.getItem('token');
token
? config.headers.Authorization = 'Bearer ' + token
: store.dispatch('setUserToDefault');
return config;
}, error => Promise.reject(error));
instance.interceptors.request.use(async config => {
const token = localStorage.getItem('token') || sessionStorage.getItem('token');
token
? config.headers.Authorization = 'Bearer ' + token
: store.dispatch('setUserToDefault');
if (!store.state.synced && token)
await axios
.post(window.location.origin + '/api/user/sync')
.then(response => {
store.dispatch('setSettings', response.data.settings);
store.dispatch('setSynced', true);
});
return config;
}, error => Promise.reject(error));
export default instance
和另一个文件 call_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时,它正在给我正确的输出cccasdsad
但是,当我使用文件 express_test.js
中的快速中间件调用test.js时var test = require('./test');
var test_ob = new test();
test_ob.b();
我收到错误。当我遇到testAPI时,this.c不是一个函数。
您能否告诉我为什么 此 在中间件中使用时无效。
答案 0 :(得分: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));