Node.js Koa.js,Mongo DB应用程序不使用猫鼬返回任何结果
我遇到了一个问题,但是我无法从MongoDB中的集合返回任何结果。数据库与集合一样存在,从Mongo CLI查询MongoDB集合将返回结果。我总是从应用程序代码库中的find()查询返回空结果 我的应用程序在运行时使用babel寄存器进行传输 我的app.js文件: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
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'.这真的很奇怪