Как создать собственные методы или функции внутри импортированных моделей в Sequelize - PullRequest
0 голосов
/ 11 мая 2018

Я новичок в Node.js.Это мой первый проект в ноде.Поскольку я использую Laravel для большинства своих проектов, я знаком с MVC (Model View Controller).Поэтому я просмотрел Sequelize ORM документацию по моделям.Я узнал, как импортировать по одному model на файл, и это сработало, но когда я добавил пользовательских функций в модель User, функция работает нормально, но ничего не возвращает.

Вот мой файл БД

const fs = require('fs');
var Sequelize = require('sequelize');
var sequelize = new Sequelize('database_name', 'userName', 'password', {
  host: 'localhost',
  dialect: 'mysql',
  operatorsAliases: false,
  logging:false,

  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  },

  // SQLite only
  //storage: 'path/to/database.sqlite'
});



sequelize.import('./../models/User.js');
var db=sequelize.models;



   module.exports={db,connectionCheck};

и вот код модели пользователя

module.exports = (sequelize, DataTypes) => {
  var User = sequelize.define('User', {},{
         timestamps: false,
        freezeTableName:true,
        tableName:'agent_info'
      });
/*This is the custom function that I added*/
      User.test = function(){
         User.findOne().then(data =>{
           console.log(data);
           return data;
        });
      };


  return User;
};

и, наконец, код файла маршрута

 app.get('/',(req,res,next) =>{
      var temp=db.User.test();
      console.log(temp);
    });

Здесь яЯ вызываю функцию user.test() (Custom Model Function), функция работает, как и ожидалось, но ничего не возвращает.Так что я делаю что-то не так, или это невозможно в Sequelize?Заранее спасибо

1 Ответ

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

Причина, по которой функция test ничего не возвращает, потому что findOne является асинхронной, и возврат должен произойти до завершения findOne.

Все, что вам нужно сделать, это вернуть User.findOne(), который вочередь вернет обещание.Примерно так:

User.test = () => User.findOne().then((data) => {
    console.log(data);
    return data;
  });

Теперь вы можете использовать User.test().then((result) => { .. }, если используете promises или const result = await User.test();, если хотите использовать async/await

PS: testфункция здесь class method.

...