Node.js Loopback:TypeError:无法读取未定义的属性'createModel'

超级Noob在这里,我有一个使用环回的REST API的问题这里是我的错误:

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(); }); 

我已经检查了很多类似的话题,一直没有find解决我的问题的方法。 我注意到当我做了一个控制台日志时,我的数据库是“{}”,如果我把所有的OATH2放到应用程序的启动函数中,它会产生一个不同的错误,但是看起来不是这样。

非常感谢您的帮助(如果不够清楚,请原谅我)

你必须将这些代码移到app.start()之下,因为当你声明一个选项时,app还没有初始化,所以在这个阶段分配了未定义的对象。

 // 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 );