2017-09-03 87 views
1

超级菜鸟的特性“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放在应用程序启动函数中,它会发出不同的错误,但看起来它不是要走的路。

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

回答

0

则必须将这些代码集移动到下面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 
); 
相关问题