Мангуст FindOne застрял, когда данных не существует - PullRequest
0 голосов
/ 18 мая 2018

Описание

Я использую Model.findOne().exec() в соответствии с документом mongoose, в моем mongodb { username: ycjcl666 }, когда я findOne({ username: 'ycjcl666' }), он может выводить данные, но я запрашиваю не существующие данные, такие как findOne({ username: 'ycjcl888' }), приложение застряло.

Приложение

использует koa@2 + mongoose@^5.0.18 + mongodb@3.6.3 для создания приложения для входа / регистрации.

код контроллера:

// controller/user.js
class UserController {
  async login(ctx) { 
    const password = await UserService.loginPass(username);
  }
}

код servcie, как этот, но он застрял, когда не существует, я try...catch, но не получить console info

// service/user.js
class UserService {
  async loginPass() {
     return User.findOne({ username }).exec();
  }
 }

// model/user.js
import mongoose from 'mongoose';
import timeZone from 'mongoose-timezone';

const Schema = mongoose.Schema;

const schema = new Schema({
  model: {
    id: String,
    name: String,
  },
  avatar: String,
  username: {
    type: String,
    required: true,
    trim: true,
  },
  password: {
    type: String,
    required: true,
  },
  count: {
    type: Number,
    default: 0,
  },
  updated_at: {
    type: Date,
    default: Date.now,
  },
  created_at: {
    type: Date,
    default: Date.now,
  },
}, {
  // remove __v
  versionKey: false,
  timestamps: {
    createdAt: 'created_at',
    updatedAt: 'updated_at',
  },
});

schema.index({ username: 1 }, { unique: true });
schema.index({
  updated_at: -1,
});

schema.plugin(timeZone);
export default mongoose.model('User', schema);

Скриншот

enter image description here

1 Ответ

0 голосов
/ 18 мая 2018

Вы используете await в await UserService.loginPass(username);, что означает, что loginPass должно возвращать Promise, я имею в виду, что вам не нужно использовать await в loginPass функции

class UserService {
  loginPass() {
    return User.findOne({ username }).exec();
  }
 }

class UserController {
  async login(ctx) { 
    const password = await UserService.loginPass(username);
  }
}

или

class UserService {
  async loginPass() {
    return await User.findOne({ username }).exec();
  }
 }

class UserController {
   login(ctx) { 
    const password = UserService.loginPass(username);
  }
}

, а также убедитесь, что вы не используете async/await, когда вы звоните UserController.login (если вызываете явно)

...