续集是一个用于node.js的广泛使用的ORM(对象关系映射)库,这些开发人员使用了与PostgreSQL,MySQL,SQLite和SQL Server等不同SQL数据库一起工作的开发人员。它提供了基于承诺的API,可以在数据库表上使用JavaScript或Typescript对象在数据库表上执行CRUD操作,交易,关联,验证等。
在此博客文章中。我们将探索如何将续集集成到打字稿。到本博客结束时
所以您的笔记本电脑,打开您的IDE,让我们从这个令人兴奋的旅程开始。
先决条件
在我们开始探索方式如何使用pypycript的quelize orm之前,让我们确保您安装了所有需要的东西。
。有必要确保在计算机上正确安装node.js。这是因为续集是为node.js应用程序构建的,这是运行OrâmM的重新计算。访问node.js的官方网站,并继续进行该软件的最新版本。
接下来,我们将使用NPM软件包管理器来获得我们的依赖。 Yarn是一位可靠的软件包经理,它在JavaScript生态系统中一直很受欢迎。在继续之前,请确保已在系统上安装它。
最后,您将需要IDE或文本编辑器。有很多不错的选择,但是VS code has many useful extensions可以提高您的编码体验和生产力。
什么是续集CLI
续集CLI是一个命令行界面,可帮助您创建和管理续集项目。它使您可以为数据库生成模型,迁移,播种机和配置文件。它还可以运行迁移和播种机来更新和填充数据库。使用Sequelize CLI在您的Node.js项目中更有效地执行工作,并具有SQL数据库的灵活性。
延长续集打字稿协会
续集是一个ORM(对象关系映射)库,它提供了一种与关系数据库交互的方便方法。当使用sudelize与Typescript使用续集时,定义模型之间的关联可能是简化数据库查询和Imry -ove性能的强大工具。续集的打字稿关联允许您在不同的选项卡中建立关系,并从单个查询中的多个表中检索数据。
要定义续集模型之间的关联,您首先要定义模型界面及其各自的属性和数据类型。定义了模型后,您可以使用属于属于属于的关系的属于属于的关系的方法来创建关联。
,您要建立的关系类型。例如,假设您有一个用户Moâdel和一个邮政模型,并且您想建立它们之间的一对多关系,每个用户都可以拥有多个帖子。您可以在打字稿中定义关联如下:
// Define User model interface
interface UserAttributes {
id: number;
name: string;
email: string;
}
interface UserInstance extends Sequelize.Instance<UserAttributes>, UserAttributes {}
const User = sequelize.define<UserInstance>('User', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
name: Sequelize.STRING,
email: Sequelize.STRING,
});
// Define Post model interface
interface PostAttributes {
id: number;
title: string;
content: string;
userId: number;
}
interface PostInstance extends Sequelize.Instance<PostAttributes>, PostAttributes {}
const Post = sequelize.define<PostInstance>('Post', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
title: Sequelize.STRING,
content: Sequelize.TEXT,
userId: Sequelize.INTEGER,
});
// Define association between User and Post models
User.hasMany(Post, { foreignKey: 'userId' });
Post.belongsTo(User, { foreignKey: 'userId' });
在示例中,Hasmany方法建立了用户与邮政模型之间的一对一关系,而属于属于帖子和用户模型之间的倒置关系。外国键选项指定了链接这两个表的外键列的名称。
总的来说,定义续集键入模型之间的关联可以通过简化复杂查询并减少数据库请求的数量来帮助您构建更有效,可维护的数据库应用程序。
管理数据库更改与续集的打字稿迁移
semelize迁移是用于管理数据库模式更改的强大工具,使您能够以Systemaâtic和可重复的方式对数据库进行版本控制并应用更改。使用续集和打字稿时,迁移对于保持数据库架构的完整性并与您的代码库保持同步特别有用。
要使用semelize中的typecript proje ct中使用迁移,您首先需要安装semelize-cli软件包并将其配置为与数据库一起使用。设置项目后,use sequelize-cli to generate migration files。这些文件将定义您希望应用于数据库架构的修改。
例如,假设您要在用户模型中添加创建的时间戳和u的时间戳。您可以在Typescript中创建一个Mig的配给文件,如下所示:
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('Users', 'createdAt', Sequelize.DATE);
await queryInterface.addColumn('Users', 'updatedAt', Sequelize.DATE);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('Users', 'createdAt');
await queryInterface.removeColumn('Users', 'updatedAt');
},
};
在此示例中,UP fu nction定义要应用于数据库的更改,并且向下功能指定了如何在回滚情况下撤消这些更改。 QueryInterface参数提供了一组用于修改数据库架构的方法,例如AddColumn,RemoveColumnâ和许多其他方法。续集参数可让您访问续集库的数据类型和实用程序。
要应用迁移,您可以在终端中运行Lowing命令:
semelize db:迁移
此命令将执行所有待处理的迁移,并相应地更新我们的数据库架构。您也可以使用db:migrate:undo命令来恢复最新的迁移或db:migratâe:undo:所有命令cret torevâert erert erertation。
总的来说,使用续集的打字稿迁移可以帮助您维护访问和可靠的数据示意图。通过保持模式更改版本的控制和重复版本,您可以避免手动错误并确保数据的稳定和完整性。
让我们通过一个例子的HE LP更好地理解。
续集打字稿示例 - 我们今天正在构建什么?
今天,我们将使用TypeScript在节点中创建一个项目,并使用Express.js Framework构建API。我们的目标是为我们的应用实施Crudoâperation。 CRUD是创建,阅读,更新和删除的首字母缩写词。通过利用这四个操作,可以从指定的存储库中创建,访问,修改或删除有价值的信息。 CRUD操作通常与SQL一起使用,SQL是一种用于查询和操纵数据库中数据的语言。
设置我们的项目
- 创建一个proj ect目录并导航到其中:
mkdir ts-sequelize
cd ts-sequelize
- 初始化一个tyâpescript项目,并添加必要的依赖项:
npm init -y
npm install typescript ts-node-dev @types/node --save-dev
在这里,我们是一个新的node.js项目和安装打字稿,即ts-node-dev,aând @types/node作为开发依赖关系。 TypeScript是JavaScript的超集,可提供强大的打字功能,TS-Node-Dev是一款开发服务器,允许我们首先运行typescr ipt文件,而无需将它们编译为JavaScript,并且 @types/node提供TypeScript node.js。
的定义- 创建一个tsconfig.json文件,然后向其添加必要的配置:
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": [
"esnext"
],
"esModuleInterop": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"target": "esnext",
"moduleResolution": "Node"
}
}
在这里,我们正在配置打字稿以生成源地图,输出编译文件到DIST目录,启用严格的类型检查,允许使用ES6功能,对装饰器的Enabâle实验支持以及将目标配置为ES6。
- 将脚本添加到我们的package.json文件以启动开发服务器:
{
// ...
"type": "module",
"scripts": {
"start": "ts-node-dev main.ts"
},
// ...
}
在这里,我们正在添加一个使用ts-node-dev运行main.ts文件的开始脚本,这将是我们应用程序的输入点。
- 为我们的应用程序安装必要的依赖项:
npm install express mariadb reflect-metadata sequelize sequelize-typescript --save
npm install @types/express @types/validator --save-dev
在这里,我们正在安装应用程序的生产依赖性,包括Express,Mariadb,续集和续集型字样。此外,我们正在安装Express和validator的打字稿定义的开发依赖项。
总的来说,这些步骤设置了我们的node.js项目,并为我们提供了使用Express.js开始构建我们的API的必要依赖性。
创建API
在本节中,我们将探索使用Express.js构建静止API并续集的过程。他们提供了各种功能,例如路由,中间件支持和错误处理。
在这些框架的帮助下。可以构建具有在数据库表上执行CRUD操作的功能的API。让我们开始吧。
// Import required dependencies
import "reflect-metadata";
import express, { Request, Response } from "express";
// Create a new express app
const app = express();
// Enable express to parse JSON data
app.use(express.json());
// Define a route for the root URL
app.get("/", (req: Request, res: Response): Response => {
return res.json({ message: "Sequelize Example 🤟" });
});
// Define a function to start the server
const start = async (): Promise<void> => {
try {
// Start listening on port 3000
app.listen(3000, () => {
console.log("Server started on port 3000");
});
} catch (error) {
// Log any errors and exit the process
console.error(error);
process.exit(1);
}
};
// Call the start function to start the server
void start();
上面的代码设置了在端口3000上听的Express.js服务器。它定义了root URL(“/”)的路由,该路线返回带有消息的JSON响应。启动服务器。启动函数被调用,不仅在服务器开始上记录消息,而且还要照顾任何遇到的错误。
初始化数据库连接
// Import the Sequelize module from sequelize-typescript
import { Sequelize } from "sequelize-typescript";
// Import the Customer model from the ./models module
import { Customer } from "./models";
// Create a new Sequelize instance with the connection configuration
const connection = new Sequelize({
dialect: "mariadb", // Specifies the database dialect
host: "localhost", // Specifies the database host
username: "root", // Specifies the database username
password: "root", // Specifies the database password
database: "sequelize", // Specifies the database name
logging: false, // Disables logging of SQL queries
models: [Customer], // Associates the Customer model with this Sequelize instance
});
// Export the connection object as the default module
export default connection;
在这里,我们使用myelize模块建立了与MariadB数据库的连接。它从续集typecript和./models模块中导入续集类。
使用指定的连接配置创建了一个新实例,包括数据库方言,主机,用户名,密码,数据库名称和日志记录选项。模型属性用于将客户模型与此续集实例相关联。
最后,连接对象将导出为默认模块,允许代码的其他部分导入并将此连接用于数据库操作。您现在必须重新启动服务器并同步数据库。
启动服务器并同步数据库
// Import necessary modules
import "reflect-metadata";
import express, { Request, Response } from "express";
// Import the connection object from ./database
import connection from "./database";
// Create a new Express application
const app = express();
// ...
// Define an asynchronous function to start the server and sync the database
const start = async (): Promise<void> => {
try {
await connection.sync(); // Synchronizes the database with the defined models
app.listen(3000, () => { // Starts the server on port 3000
console.log("Server started on port 3000");
});
} catch (error) {
console.error(error); // Logs any errors that occur
process.exit(1); // Exits the process with an error status code
}
};
void start(); // Invokes the start function to start the server
此代码设置了Express.js服务器,并使用从./database Module导入的连接对象建立了与数据库的连接。
这样,它创建了一个新的Express应用程序,该应用程序定义为一个命名start的异步函数,并在端口3000上启动服务器。在启动函数中,connect.sync()方法被调用以使数据库与已定义的数据库同步楷模。如果弹出错误,它将在控制台上登录或使用错误状态代码退出。
代码以void start()语句结束,该语句负责调用启动函数以初始化服务器并建立数据库连接。
Crud操作
- 检索所有客户
/**
* GET all customers from the database
* @returns an array of all customers
*/
app.get("/customers", async (req: Request, res: Response): Promise<Response> => {
const allCustomers: Customer[] = await Customer.findAll();
return res.status(200).json(allCustomers);
});
在上述代码中,定义了/客户路径上的GET方法的路由处理程序。它使用异步函数使用Findall方法查询数据库中的所有记录。然后,它返回具有200(确定)的状态代码和包含所有客户数组的JSON主体的响应。
- 通过ID检索一个客户
// GET a single customer by id
app.get("/customers/:id", async (req: Request, res: Response): Promise<Response> => {
// Get the id parameter from the request URL
const { id } = req.params;
// Find the customer with the specified id using Sequelize's `findByPk()` method
const customer: Customer
使用async函数从请求URL获取ID参数,并使用quelize findbypk()方法在数据库中找到该ID的客户。
提交请求后,将获得响应。如果找到客户对象,此响应将具有200(确定)的状态代码。响应还将以JSON格式包含客户对象。如果没有发现客户,则状态代码为404(未发现),并且在响应中提供了错误消息。
结论
此博客提供了一个全面的gui gui,以设置和使用Typescript进行续集来构建可靠和可维护的API。我们介绍了使用续集的基本原理,包括创建模型,定义关联,并通过迁移来管理数据库更改。
so get started with sequelize CLI,并将其与打字稿集成以构建可扩展和维护API并管理复杂数据库模式。
快乐编码!