Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Koa.js,Mongo DB应用程序不使用猫鼬返回任何结果_Node.js_Mongoose_Koa - Fatal编程技术网

Node.js Koa.js,Mongo DB应用程序不使用猫鼬返回任何结果

Node.js Koa.js,Mongo DB应用程序不使用猫鼬返回任何结果,node.js,mongoose,koa,Node.js,Mongoose,Koa,我遇到了一个问题,但是我无法从MongoDB中的集合返回任何结果。数据库与集合一样存在,从Mongo CLI查询MongoDB集合将返回结果。我总是从应用程序代码库中的find()查询返回空结果 我的应用程序在运行时使用babel寄存器进行传输 我的app.js文件: import Koa from 'koa'; import path from 'path'; import bodyParser from 'koa-bodyparser'; import serve from 'koa-sta

我遇到了一个问题,但是我无法从MongoDB中的集合返回任何结果。数据库与集合一样存在,从Mongo CLI查询MongoDB集合将返回结果。我总是从应用程序代码库中的find()查询返回空结果

我的应用程序在运行时使用babel寄存器进行传输

我的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 });

    }
此控制器包含登录、注册等功能。如您所见,用户模式作为类的属性放入构造函数中。
然后,我使用登录功能查询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" }
有人看到这里发生了什么吗


谢谢

在app.js中,首先您将通过mongoose与mongo连接,然后您将加载所有文件。 在这种情况下,您不会加载路由器和模型。
而且你知道mongoose连接是异步的,所以你可以用同步方式编写代码来加载模型和路由器。为此,你将使用异步等待模式或回调。

为什么要用承诺来包装呢?mongoose方法已经返回了承诺。你可以调用
.exec()
来获得“完全”承诺,但它们都有
。然后()
默认情况下。如果您只是返回普通方法的响应,我想您可能会发现一切正常。很抱歉,这是一个错误。我已经修改了函数,Mongo db仍然没有返回任何结果。请显示您编辑的代码。我仍然在其中看到一个
拒绝
,因此我不确定您是否编辑了问题或粘贴了您的真实代码已输入。请检查您的输入,以确保您输入的是您认为您正在输入的内容。道歉是一个复制粘贴错误。我已将代码修改为您建议的内容,但在响应中仍然没有结果。我可以看到更正集和数据库已被选中,电子邮件搜索词为“james.alex”。holman@gmail.com'.这真的很奇怪