我遇到了问题,但我无法从MongoDB中的集合中返回任何结果。数据库与集合一样存在,并且从Mongo CLI查询MongoDB集合返回结果。我总是从我的应用程序代码库中的find()查询返回空结果。
我的应用程序在运行时使用babel-register进行编译。
我的app.js文件:
import Koa from 'koa';
import path from 'path';
import bodyParser from 'koa-bodyparser';
import serve from 'koa-static';
import mongoose from 'mongoose';
import Config from '../Config.js';
global.appRoot = path.resolve(__dirname);
const app = new Koa();
mongoose.connect(Config.mongo.url);
mongoose.connection.on('connected', (response) => {
console.log(response);
});
mongoose.connection.on('error', (err) => {
console.log(err);
});
............
这样可以正常工作并且on('connected'...回调工作正常并被调用。
我的用户架构:
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
const UserSchema = new Schema({
username: {
type: String,
required: true,
unique: true,
lowercase: true
},
password: {
type: String,
required:
true
},
email: {
type: String,
required: true,
unique: true
}
});
export default mongoose.model('user', UserSchema);
我的路线档案:
import Router from 'koa-router';
import authenticate from '../../middlewares/authenticate';
import mockCustomerService from '../../mock-services/customerService';
import AccountController from '../../controllers/accountController';
import UserModel from '../../models/UserModel';
const AccountControllerInstance = new AccountController(UserModel);
const authRouter = new Router();
/** Login function **/
authRouter.post('/login', async (ctx, next) => {
AccountControllerObject.login(ctx)
.then((response) => {
console.log(response);
});
});
如您所见,我将用户架构注入AccountControllerInstance
帐户控制器类
import ApiResponse from '../models/ApiResponse.js';
import ApiMessages from '../models/ApiMessages.js';
import UserProfileModel from '../models/UserProfileModel.js';
class AccountController {
constructor(userModel, token) {
this.ApiResponse = ApiResponse;
this.ApiMessages = ApiMessages;
this.UserProfileModel = UserProfileModel;
this.userModel = userModel;
this.token = token;
}
login(ctx) {
return this.userModel.find({ email: ctx.request.body.email });
}
此控制器包含登录,注册等功能。如您所见,用户模式作为类的属性放在构造函数中。
然后我使用login函数来查询Mongo实例,但我从未得到任何返回的结果。我已经检查了集合中是否有正确的记录,并确保查询(在这种情况下是电子邮件)是准确的,但仍然没有结果。
以下是mongo cli使用查找查询生成的'degould-login'数据库中'users'集合中的记录示例。
db.user.find({email: "james.alex.holman@gmail.com"})
结果:
{ "_id" : ObjectId("594a313a98e5b9f2f9dc9553"), "email" : "james.alex.holman@gmail.com", "username" : "james", "password" : "test" }
任何人都能看到这里发生了什么?
由于
答案 0 :(得分:0)
首先在app.js中通过mongoose与mongo连接,然后你将加载所有文件。 在这里你没有加载路由器和型号。 而且你知道mongoose连接是异步的,所以你以同步方式编写代码来加载模型和路由器。为此,您将使用async -await模式或回调。