Экспресс: проблема с использованием асинхронного ожидания в контроллере - PullRequest
0 голосов
/ 23 декабря 2018

Я не знаю, что здесь происходит, я просто использую async await:

const Employee = require('../models/employee');

const employeeCtrl = {};

employeeCtrl.getEmployees = async (req, res) => {
  const employees = await Employee.find();
  res.json(employees);
}

employeeCtrl.createEmployee = async (req,res) => {
  const employee = new Employee(req.body)
  console.log(employee);
  await employee.save();
  res.json('recivied');
}

employeeCtrl.getEmployee = function() {

}

employeeCtrl.editEmployee = function() {

}

employeeCtrl.deleteEmployee = function() {

}

module.exports = employeeCtrl;

это возвращает ошибку:

TypeError: Employee.find нефункция в employeeCtrl.getEmployees (D: \ curso \ server \ controllers \ employee.controller.js: 6: 31) в Layer.handle [как handle_request] (D: \ curso \ node_modules \ express \ lib \ router \ layer.js: 95: 5) в следующем (D: \ curso \ node_modules \ express \ lib \ router \ route.js: 137: 13) в Route.dispatch (D: \ curso \ node_modules \ express \ lib \ router \ route.js: 112: 3) в Layer.handle [как handle_request] (D: \ curso \ node_modules \ express \ lib \ router \ layer.js: 95: 5) в D: \ curso \ node_modules \ express \ lib \ router \index.js: 281: 22 в Function.process_params (D: \ curso \ node_modules \ express \ lib \ router \ index.js: 335: 12) в следующем (D: \ curso \ node_modules \ express \ lib \ router \ index.js: 275: 10) в Function.handle (D: \ curso \ node_modules \ express \ lib \ router \ index.js: 174: 3) на маршрутизаторе (D: \ curso \ node_modules \ express \ lib \ router \ index.js: 47: 12) в Layer.handle [как handle_request] (D: \ curso \ node_modules \ express \ lib \ router \ layer.js: 95: 5) в trim_prefix (D: \ curso \ node_modules \ express \ lib \ router \ index.js: 317: 13) в D: \ curso \ node_modules \ express \lib \ router \ index.js: 284: 7 в Function.process_params (D: \ curso \ node_modules \ express \ lib \ router \ index.js: 335: 12) в следующем (D: \ curso \ node_modules \ express \ lib\ router \ index.js: 275: 10) в jsonParser (D: \ curso \ node_modules \ body-parser \ lib \ types \ json.js: 110: 7)

Почему найти нефункция?

Это модель:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const EmployeeSchema = new Schema({
  name: {type: String, required: true},
  position: {type: String, required: true},
  office: {type: String, required: true},
  salary: {type: Number, required: true}
})

mongoose.model('Employee', EmployeeSchema);

Ответы [ 3 ]

0 голосов
/ 23 декабря 2018

Мне кажется, проблема в том, что вы не экспортируете только что созданную схему.

Попробуйте это

module.exports = mongoose.model('Employee', EmployeeSchema);

Вместо этого

mongoose.model('Employee', EmployeeSchema);
0 голосов
/ 23 декабря 2018

Из вашего примера кода не похоже, что вы экспортируете модель.Возможно, попробуйте это в models/Employee:

module.exports = mongoose.model('Employee', EmployeeSchema);
0 голосов
/ 23 декабря 2018

Вы ничего не экспортируете из своей модели.Вам нужно экспортировать его так:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const EmployeeSchema = new Schema({
  name: {type: String, required: true},
  position: {type: String, required: true},
  office: {type: String, required: true},
  salary: {type: Number, required: true}
})

module.exports = mongoose.model('Employee', EmployeeSchema);

Кроме того, .find() не возвращает Promise.Он возвращает объект Query, как указано в документах: https://mongoosejs.com/docs/api.html#model_Model.find

Вам необходимо связать его с помощью .exec(), который возвращает Promise: https://mongoosejs.com/docs/api.html#query_Query-exec

employeeCtrl.getEmployees = async (req, res) => {
  const employees = await Employee.find().exec();
  res.json(employees);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...