Sequelize CLI: sequelize init: models, как это работает? - PullRequest
0 голосов
/ 05 мая 2020

Команда sequelize init: models создает папку 'models' и добавляет индекс. js.

Может кто-нибудь объяснить, что именно делает этот файл index. js и как он вписывается в рабочий процесс с Sequelize? Я действительно wi sh кто-нибудь добавил бы некоторую документацию или, возможно, комментарии к файлу.

1 Ответ

1 голос
/ 05 мая 2020

По сути, он будет читать все в каталоге «models» и загружать их в объект db, чтобы вы могли поиграть с ним

Допустим, у вас есть такая структура подкаталогов:

C:.
│   package.json
│   server.js
│
├───config
│       config.json
│
├───models
│       company.js
│       contact.js
│       index.js  // your index.js
│       job.js
│       task.js

Вот образец компании. js. Все, что он делает, объявлено таблицей для продолжения. contact. js, job. js и task. js имеют похожие структуры.

module.exports = function (sequelize, DataTypes) {
  var Company = sequelize.define("Company", {
    user_id: {
      type: DataTypes.INTEGER
    },
    company: {
      type: DataTypes.STRING,
      allowNull: false,
      unique: true
    },
    notes: {
      type: DataTypes.TEXT
    },
    rating: {
      type: DataTypes.INTEGER
    }
  });
  return Company;
};

Со мной пока? Хорошо. Индекс будет читать ВСЕ ДРУГИЕ js файлы в подкаталоге моделей и создавать за вас объект db. Затем вы можете использовать его в своих api-маршрутах для сервера express. Например ...

 app.get("/api/company", function (req, res) {
    console.log("At /api/company GET...")
    db.Company.findAll({     // <<------ I just call db.Company... 
      where: {
        user_id: req.user.id
      }
    }).then(function (dbCompany) {
      res.json(dbCompany);
    });
  });

Если я хочу что-то сделать с таблицей заданий, я бы просто сделал

    db.Job.findAll({     // <<------ I just call db.Job... 

И аналогично, для контакта. js и задачи . js тоже.

Без индекса. js, я должен ссылаться на КАЖДУЮ модель отдельно. Index. js делает все это ДЛЯ МЕНЯ в одном объекте, db. (Имя модели), с которым я могу затем использовать функции sequelize.

Что еще интереснее, когда вы добавляете модели, вам не нужно добавлять дополнительные объявления. Вы можете просто сослаться на свой код.

Допустим, вы только что добавили «комментарий. js» для таблицы комментариев со структурой, аналогичной приведенной выше.

Вам не нужно изменять index. js. Он автоматически найдет его во время выполнения и добавит за вас в объект db. (Modelname). Таким образом, вы можете добавить новый маршрут, который вызывает что-то вроде этого:

    db.Comment.findAll({    ...

По сути, это избавляет вас от лишних хлопот.

...