当前位置: 代码迷 >> 综合 >> Egg使用MongoDB时运行出现:TypeError:Cannot read property ‘hasOwnProperty‘ of undefined
  详细解决方案

Egg使用MongoDB时运行出现:TypeError:Cannot read property ‘hasOwnProperty‘ of undefined

热度:21   发布时间:2024-02-07 20:11:24.0

Egg使用MongoDB时运行出现:TypeError:Cannot read property 'hasOwnProperty' of undefined

  • 各种排查查阅,最终发现是由于我的MongoDB中的egg_test数据库并没有给它设置相应的管理员账号所致,= =|||
    • 在Egg中安装MongoDB
    • 配置
    • 在app下新建文件夹model,model下新建tea.js文件
    • 在app下新建文件夹service,service下新建tea.js文件
    • 在app下controller文件夹新建tea.js
    • 配置路由

各种排查查阅,最终发现是由于我的MongoDB中的egg_test数据库并没有给它设置相应的管理员账号所致,= =|||

  1. 进入MongoDB
  2. 切换数据库:use egg_test
  3. 创建用户:db.createUser({user: “root”, pwd: “root”, roles: [{ role: “dbOwner”, db: “test” }]})
  4. 查看用户:show users
  5. 搞定啦~
  6. 【注意】配置文件里要按下面的来配哦

在Egg中安装MongoDB

VS Code命令行中输入:npm i egg-mongoose --save

配置

文件目录:/config/plugin.js
exports.mongoose = {
enable: true,
package: ‘egg-mongoose’,
};

文件目录:/config/config.default.js
config.mongoose = {
client: {
url: ‘mongodb://127.0.0.1’,
options: {
user: ‘root’,
pass: ‘root’,
dbName: ‘egg_test’,
},
},
};

在app下新建文件夹model,model下新建tea.js文件

‘use strict’;

module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
const TeaSchema = new Schema({
name: {type: ‘string’},
password: {type: ‘string’},
});
return mongoose.model(‘Tea’, TeaSchema’);

};

在app下新建文件夹service,service下新建tea.js文件

‘use strict’;

const Service = require(‘egg’).Service;

class TeaService extends Service {
async getTeaByName() {
const ctx = this;
try {
const results = await ctx.model.Tea.find({
name: ‘jack’,
});
return results;
} catch (err) {
ctx.body = JSON.stringify(err);
}
}

}
module.exports = TeaService ;

在app下controller文件夹新建tea.js

‘use strict’;
const Controller = require(‘egg’).Controller;

class TeaController extends Controller {
async index() {
const { ctx } = this;
const result = await ctx.service.tea.getTeaByName();
ctx.body = result ;
}
}

module.exports = TeaController ;

配置路由

‘use strict’;

/**

  • @param {Egg.Application} app - egg application
    */
    module.exports = app => {
    const { router, controller } = app;
    router.get(’/’, controller.home.index);
    router.get(’/tea’, controller.tea.index);
    };
  相关解决方案