Node.js的环回:类型错误:无法读取未定义
问题描述:
超级菜鸟的特性“createModel”在这里,我必须用回环这里REST API的一个问题是我的错误:Node.js的环回:类型错误:无法读取未定义
TypeError: Cannot read property 'createModel' of undefined
at module.exports (/home/...../node_modules/loopback-component-oauth2/lib/models/oauth2-models.js:35:30)
at module.exports (/home/...../node_modules/loopback-component-oauth2/lib/models/index.js:24:42)
at Function.module.exports [as oAuth2Provider] (/home/...../node_modules/loopback-component-oauth2/lib/oauth2-loopback.js:48:16)
at Object.<anonymous> (/home/...../server/server.js:17:8)
at Module._compile (module.js:569:30)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3)
at Function.Module.runMain (module.js:605:10)
at startup (bootstrap_node.js:158:16)
at bootstrap_node.js:575:3
这里是我在我server.js:
'use strict';
var loopback = require('loopback');
var boot = require('loopback-boot');
// pour OATH2
var oauth2 = require('loopback-component-oauth2');
var app = module.exports = loopback();
// OATH2
var options = {
dataSource: app.dataSources.db, // Data source for oAuth2 metadata persistence
loginPage: '/login', // The login page URL
loginPath: '/login' // The login form processing URL
};
oauth2.oAuth2Provider(
app, // The app instance
options // The options
);
app.start = function() {
// start the web server
return app.listen(function() {
app.emit('started');
var baseUrl = app.get('url').replace(/\/$/, '');
console.log('Web server listening at: %s', baseUrl);
if (app.get('loopback-component-explorer')) {
var explorerPath = app.get('loopback-component-explorer').mountPath;
console.log('Browse your REST API at %s%s', baseUrl, explorerPath);
}
});
};
// Bootstrap the application, configure models, datasources and middleware.
// Sub-apps like REST API are mounted via boot scripts.
boot(app, __dirname, function(err) {
if (err) throw err;
// start the server if `$ node server.js`
if (require.main === module)
app.start();
});
我已经签了一大堆类似的话题,一直无法找出任何解决我的问题。 我注意到当我做一个控制台日志时,我的数据库是“{}”,如果我把所有的OATH2放在应用程序启动函数中,它会发出不同的错误,但看起来它不是要走的路。
非常感谢您的帮助(并请原谅我,如果这还不够清楚:))
答
则必须将这些代码集移动到下面app.start(),因为当你宣布一个选项,应用程序尚未初始化,因此在该阶段分配了未定义的对象。
// OATH2
var options = {
dataSource: app.dataSources.db, // Data source for oAuth2 metadata persistence
loginPage: '/login', // The login page URL
loginPath: '/login' // The login form processing URL
};
oauth2.oAuth2Provider(
app, // The app instance
options // The options
);