javascript - Node.js 环回 : TypeError: Cannot read property 'createModel' of undefined

标签 javascript node.js api loopbackjs

这里是 super 新手,我在使用环回的 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();
});

我检查了很多类似的主题,但未能找到解决我问题的方法。 我注意到当我执行控制台日志时我的数据库是“{}”,如果我将所有 OATH2 都放在应用程序启动函数中,它会出现不同的错误,但看起来这不是正确的方法。

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

最佳答案

你必须把这组代码移到 app.start() 下面,因为当你声明一个选项时,app 还没有初始化,所以在那个阶段分配了 undefined object 。

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

关于javascript - Node.js 环回 : TypeError: Cannot read property 'createModel' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46022985/

相关文章:

javascript - 更改视频react-native-video组件中的状态/属性

javascript - Rails 4 Flot 未捕获类型错误和错误显示

javascript - 密码确认后如何将用户重定向到url?

Node.js - EJS - 包括部分

api - 使用 VB/ASP classic 可以向 API 发出 HTTP 请求吗?

javascript - 防止 window.location.href 编码 url

javascript - shouldoverrideurlloading 不叫 Webview Android

javascript - Node.js/Server.js 套接字实现问题

python - urllib 无法处理 api 请求

python - 如何通过 API 公开 Web 应用程序?