JavaScript >> Javascript 文檔 >  >> Node.js

Node Js 中的代碼優先方法!

代碼優先 - 將代碼優先於模式的方法。 Code First 是一種幫助我們從代碼中創建數據庫、遷移和維護數據庫及其表的技術。

Sequelize 是代碼優先的包。它可以支持許多數據庫以及 MYSQL、MSQL 和 sqlLight。為此

先決條件
要運行 sequelize ,您應該在系統上安裝一些東西。

首先我們需要安裝sequelize包

$ npm install --save sequelize

安裝sequelize cli

$ npm install sequelize-cli -D

安裝你想要的數據庫

$ npm install --save mysql2 //sqlite,mssql

讓我們首先使用以下命令創建我們的配置文件:

$ npx sequelize-cli init

這將為您生成一些文件,您的項目文件夾現在應如下所示:
.
├── config
│ └── config.json
├── migrations
├── models
│ └── index.js
└── package.json

連接到數據庫

    const sequelize = new Sequelize('database', 'username', 
      'password', {
       host: 'localhost',
       dialect:mssql
   });

測試與數據庫的連接

sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});

定義模型
Sequelize 是關於數據庫語言中的模型,我們可以說這些是我們的模式——我們的數據採用的結構。您的模型是您將在應用程序中與之交互的對象,以及您將在數據庫中創建和管理的主表.

為用戶表創建模型

module.exports = (sequelize: any, DataTypes : any) => {
  class User extends Model<UserAttributes> 
  implements UserAttributes{

    Id!: number;
    FirstName!: string;
    static associate(models : any) {
      // define association here

    }
  };
  User.init({ 
    Id: {
      type: DataTypes.INTEGER,
      autoIncrement: true,
      allowNull: false,
      primaryKey: true
    },
    FirstName: {
      type: DataTypes.STRING(20),
      allowNull: false
  }, {
    sequelize,
    modelName: 'User',
    freezeTableName:true
  });
  return User;
};

同步您的模型

設置 Sequelize 的最後一步是同步我們的模型。我們可以通過調用 .sync() 來同步各個表 在桌子上。
例如,user.sync()role.sync() .要同步整個數據庫,只需使用 db.sync() .
測試時,有時每次啟動應用程序時從新表開始會更容易。 .sync() 可以使用帶有參數的對象,這些參數允許您控制數據庫同步的各個方面。其中之一是 {force:true}。
db.sync({force: true}) 將刪除您的表,並重新同步您的數據,就像您開始新的一樣。

db.sequelize.sync({ force: true }).then(() => {
    app.listen(port, () => {
        console.log("Drop and re-sync DB");
    })
});

force:true 如果表已經存在則刪除表

遷移

遷移文件的名稱將具有創建遷移文件時的時間戳。原因是 sequelize 可以先運行較舊的遷移文件,然後再運行在它們之上構建的新遷移文件。當需要對數據庫進行更改時,這很有用。
此外,請確保您的模型和遷移匹配。遷移文件跟踪數據庫模式的狀態,並且應始終在對模型進行更改時創建。對模型進行更改時,始終提交相應的遷移文件。

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('user', {

//write code here 

  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('user');
  },
};

假設您忘記在用戶表中添加電子郵件列,不用擔心的 sequelize 遷移有一個 addColumn 函數可以解決問題
sequelize migration:create --name add-email-to-user

此命令僅生成遷移文件,因此您必須在 up 和 down 函數中添加一些代碼

'use strict';

module.exports = {
  up: function (queryInterface, Sequelize) {
    return queryInterface.addColumn( 'user', 'email', Sequelize.STRING );
  },

  down: function (queryInterface, Sequelize) {
    return queryInterface.removeColumn( 'user', 'email' );
  }
};

每次運行 sequelize db:migrate 它將調用 up 方法。如果你想向後恢復,你可以調用 sequelize db:migrate:undo 這將調用 down 方法。它們應該始終是相反的操作,這樣您就可以安全地運行遷移並知道數據庫的狀態將保持不變。


Tutorial JavaScript 教程
  1. 本機與跨平台移動應用程序開發

  2. 在 redux 中用新狀態更新狀態

  3. 必須為高階函數做面試題

  4. 無代碼 - 沒有後端 開發人員的表單發送器 發送您的 <form> 沒有後端

  5. 使用 Context API 在 React 應用程序中進行狀態管理

  6. 處理和替換雙花括號內的文本

  7. JAVASCRIPT IRL:JavaScript 示例減少現實生活中的功能

  1. Recoil - 理想的 React 狀態管理庫?

  2. 為什麼我們使用 JavaScript 包裝器?

  3. ES2020:新功能和超越

  4. 為 Gatsby 做貢獻 - 問題 #20699

  5. 我可以用window.postMessage做同步跨域通信嗎?

  6. 製作自定義 Lorem Ipsum 生成器

  7. Javascript (ES2020) ** Nullish Coalescing_( ?? ) 和可選鏈 ( ?. ) 解釋

  1. 5 個 HTML5 YouTube jQuery 插件

  2. 如何使用 Vercel 和 GitHub 部署 React 應用程序——分步指南

  3. 解碼 UTF-8

  4. 使用 Storybook 製作更好的組件