已解决
应该是没有链接数据库,在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这样是可以得到结果
});
有人知道这是为什么吗???
没人吗
有人吗
控制台输出呢,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兼容不对了。还是你代码结构影响了呀~ 学习了一下~