Koa.js,Mongo数据库应用程序没有使用Mongoose返回任何结果

时间:2017-06-21 11:01:46

标签: node.js mongoose koa

我遇到了问题,但我无法从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" }

任何人都能看到这里发生了什么?

由于

1 个答案:

答案 0 :(得分:0)

首先在app.js中通过mongoose与mongo连接,然后你将加载所有文件。 在这里你没有加载路由器和型号。 而且你知道mongoose连接是异步的,所以你以同步方式编写代码来加载模型和路由器。为此,您将使用async -await模式或回调。