问一个egg-mongoose问题
发布于 7 年前 作者 1599500358 6275 次浏览 来自 问答

已解决

应该是没有链接数据库,在model里加入mongoose.connect(’’)就好了。

问题

//plugin.js
exports.mongoose = {
    enable: true,
    package: 'egg-mongoose',
};
//config.default.js
exports.mongoose = {
  url: 'mongodb://localhost:27017/mydb',
  options: {},
};
//\model\user.js
module.exports = app => {
    const mongoose = app.mongoose;
    const Schema = mongoose.Schema;
  
    const UserSchema = new Schema({
      userName: { type: String  },
      password: { type: String  },
    });
  
    return mongoose.model('User', UserSchema);
}
//\controller\user.js
const Controller = require('egg').Controller;

class UserController extends Controller {
  async getUser() {
    console.log(this.ctx.model)
    this.ctx.body = await this.ctx.model.User.find();
  }
}

module.exports = UserController;

使用egg-mongoose链接mydb库的user集合获取数据,上面代码运行后浏览器访问http://127.0.0.1:7001/user并没有任何结果 连接失败 Firefox 无法建立到 127.0.0.1:7001 服务器的连接。 此站点暂时无法使用或者太过忙碌。请过几分钟后再试。 如果您无法载入任何网页,请检查您计算机的网络连接状态。 如果您的计算机或网络受到防火墙或者代理服务器的保护,请确认 Firefox 已被授权访问网络

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("mydb");
    dbo.collection("User"). find({}).toArray(function(err, result) { // 返回集合中所有数据
        if (err) throw err;
            console.log(result);
        db.close();
    });
	//直接用mongodb这样是可以得到结果
});

有人知道这是为什么吗???

11 回复

没人吗

有人吗

控制台输出呢,mongo开了吗

@wangchaoduo 开了的,用下面那个代码就可以控制台输出, egg里 var a = await this.ctx.model.User.find({}); console.log(a); 控制台一直没有任何信息,直接就卡在find那了

@wangchaoduo 看了一下cnode的源码也是用的这个插件他们是this.ctx.model.User.find().exec();这样用的,我也这样试过还是没反应

是不是链接的代码在model代码定义的后面了 用mongoose.model的时候要注意mongoose要先链接不然没connection对象?

@koroshi 大神在哪链接,我看文档上也也是就是像我那样写的,cnode也是这样的。

@1599500358 我也是萌新- -~就是代码加载顺序,比如加载model的代码执行的时候,加载链接的代码还没执行就可能出现mongoose.connection这个还没拿到值,所以就没有操作到实际的数据库了。 我写express的时候遇到过这样的问题,egg还没正式使用不清楚是不是这个原因

@koroshi egg好像不用自己写链接代码,你看一下示例代码里都没有https://github.com/eggjs/egg-mongoose

@koroshi 看了一下mongoose的文档在model那里加了链接代码就可以用了。

@1599500358 soga不过要看看是eggmongoose兼容不对了。还是你代码结构影响了呀~ 学习了一下~

回到顶部