配置mongoose连接时,报错对象未定义Cannot read property 'Bank' of undefined
请使用
npm init egg --type=simple bug创建,并上传到你的 GitHub 仓库
https://github.com/shinji3887/eggjs-demo
controller代码:
'use strict';
const Controller = require('egg').Controller;
class BankController extends Controller {
async index() {
const { ctx } = this;
//ctx.response.body = {ret:'121212'}
ctx.body = await this.model.Bank.find({});
}
}
module.exports = BankController;
model代码:
'use strict';
module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
const UserSchema = new Schema({
name: { type: String },
age: { type: Number },
company: { type: String}
});
return mongoose.model('Bank', UserSchema,'col');
}
plugin配置:
'use strict';
/** @type Egg.EggPlugin */
module.exports = {
// had enabled by egg
// static: {
// enable: true,
// }
};
exports.mongoose = {
enable: true,
package: 'egg-mongoose'
};
config.default.js配置:
/* eslint valid-jsdoc: "off" */
'use strict';
/**
* @param {Egg.EggAppInfo} appInfo app info
*/
module.exports = appInfo => {
/**
* built-in config
* @type {Egg.EggAppConfig}
**/
const config = exports = {};
// use for cookie sign key, should change to your own and keep security
config.keys = appInfo.name + '_1581178232166_9983';
// add your middleware config here
config.middleware = ['auth'];
config.mongoose = {
client: {
url: 'mongodb://127.0.0.1/eggcms',
options: {}
},
};
// add your user config here
const userConfig = {
// myAppName: 'egg',
auth: {
threshold: 1033, // 小于 1k 的响应体不压缩
enable: true
}
};
return {
...config,
...userConfig,
};
};
错误日志:
2020-02-10 00:14:19,867 ERROR 23485 [-/127.0.0.1/-/19ms GET /users?id=admin] nodejs.TypeError: Cannot read property 'Bank' of undefined
at BankController.index (/Users/keyibunn/eggjs/app/controller/bank.js:10:33)
at Object.callFn (/Users/keyibunn/eggjs/node_modules/egg-core/lib/utils/index.js:44:21)
at Object.classControllerMiddleware (/Users/keyibunn/eggjs/node_modules/egg-core/lib/loader/mixin/controller.js:87:20)
at Object.callFn (/Users/keyibunn/eggjs/node_modules/@eggjs/router/lib/utils.js:12:21)
at wrappedController (/Users/keyibunn/eggjs/node_modules/@eggjs/router/lib/egg_router.js:322:18)
at dispatch (/Users/keyibunn/eggjs/node_modules/koa-compose/index.js:44:32)
at next (/Users/keyibunn/eggjs/node_modules/koa-compose/index.js:45:18)
at /Users/keyibunn/eggjs/node_modules/@eggjs/router/lib/router.js:190:18
at dispatch (/Users/keyibunn/eggjs/node_modules/koa-compose/index.js:44:32)
at /Users/keyibunn/eggjs/node_modules/koa-compose/index.js:36:12
已解决,配置错误
已解决,配置错误
请问是哪里的配置的问题呢?
已解决,配置错误
请问是哪里的配置的问题呢?
产生这个问题是由于model对象未注入ctx造成的,新版的eggjs的plugin.js和官方文档的配置方式略有不同,文档里没有说明,下面是我的配置
'use strict';
/** @type Egg.EggPlugin */
module.exports = {
// had enabled by egg
// static: {
// enable: true,
// }
mongoose: {
enable: true,
package: 'egg-mongoose',
},
validate: {
enable: true,
package: 'egg-validate',
},
swaggerdoc: {
enable: true,
package: 'egg-swagger-doc',
}
};
可以debug一下,如果ctx中有model对象了,说明插件启用成功
/** @type Egg.EggPlugin */您好,非常感谢您的回复,但是我试了一下,还是取不到model对象,我的版本如下:
找到解决办法了,谢谢您~
再骂自己一句,我是sb
@llh1187 怎么解决的 ?
@llh1187 怎么解决的 ?
好像是使用的时候写漏某个字段,你检查一下是不是。
@llh1187 怎么解决的 ?
好像是使用的时候写漏某个字段,你检查一下是不是。
console.log(this.ctx.model.attendence);
我这样检查还是访问不到model
@bingnoi model必须有个匹配的service或者controller
我是只写了model,所以访问不到这个model
已解决,配置错误
请问是哪里的配置的问题呢?
产生这个问题是由于model对象未注入ctx造成的,新版的eggjs的plugin.js和官方文档的配置方式略有不同,文档里没有说明,下面是我的配置
'use strict'; /** @type Egg.EggPlugin */ module.exports = { // had enabled by egg // static: { // enable: true, // } mongoose: { enable: true, package: 'egg-mongoose', }, validate: { enable: true, package: 'egg-validate', }, swaggerdoc: { enable: true, package: 'egg-swagger-doc', } };可以debug一下,如果ctx中有model对象了,说明插件启用成功
确实是这样,我是照着官方文档操作的,结果一直找不到model。照你这个方式写plugin正常了,感谢🙏
已解决,配置错误
请问是哪里的配置的问题呢?
产生这个问题是由于model对象未注入ctx造成的,新版的eggjs的plugin.js和官方文档的配置方式略有不同,文档里没有说明,下面是我的配置
'use strict'; /** @type Egg.EggPlugin */ module.exports = { // had enabled by egg // static: { // enable: true, // } mongoose: { enable: true, package: 'egg-mongoose', }, validate: { enable: true, package: 'egg-validate', }, swaggerdoc: { enable: true, package: 'egg-swagger-doc', } };可以debug一下,如果ctx中有model对象了,说明插件启用成功
确实是这样,我是照着官方文档操作的,结果一直找不到model。照你这个方式写plugin正常了,感谢🙏
我复制官方的设置方法会找不到model层,但是按照这个设置方法会报如下错误:
2021-02-20 15:47:03,653 ERROR 7315 nodejs.AppWorkerDiedError: [master] app_worker#22:8535 died (code: 0, signal: null, suicide: false, state: dead), current workers: []
at Master.onAppExit (/Users/kim/DEV/homestay/backEnd/node_modules/egg-cluster/lib/master.js:510:21)
at Master.emit (node:events:376:20)
at Messenger.sendToMaster (/Users/kim/DEV/homestay/backEnd/node_modules/egg-cluster/lib/utils/messenger.js:137:17)
at Messenger.send (/Users/kim/DEV/homestay/backEnd/node_modules/egg-cluster/lib/utils/messenger.js:102:12)
at EventEmitter.<anonymous> (/Users/kim/DEV/homestay/backEnd/node_modules/egg-cluster/lib/master.js:353:22)
at EventEmitter.emit (node:events:388:22)
at ChildProcess.<anonymous> (node:internal/cluster/master:199:13)
at Object.onceWrapper (node:events:483:26)
at ChildProcess.emit (node:events:376:20)
at Process.ChildProcess._handle.onexit (node:internal/child_process:284:12)
name: "AppWorkerDiedError"
pid: 7315
我太难了吧,请问这个错误有知道原因的大佬吗?