【Node.js教程】01—启动项目-采用NodeJs构建一个金融科技银行应用程序

英文 | https://www.blog.duomly.com/node-js-course-with-building-a-fintech-banking-app-lesson-1-start-the-project/

翻译 | web前端开发(web_qdkf)

本文是我们Node.js课程的第一课。

一周前,我和我的朋友开始构建一个新项目,该项目分为两个部分内容:后端使用Golang  , 前端使用Angular 9。

同时,我们想到了为你提供Golang课程替代方案的方法,并向你展示如何使用Node.js构建类似的后端。

在本文中,我们将从设置Nest.js项目开始,与PostgreSQL数据库连接并进行迁移。

我们将使用Nest.js,它是一个打字稿框架,有点像Node.js的Angular。它非常易于使用,因此我认为,对于初学者来说,这是一个不错的选择。

除此之外,我们将使用Sequelize进行数据库维护,并使用Umzug进行迁移。我们选择了一个PostgreSQL数据库,因此如果你可以创建一个空数据库来启动该项目,那就太好了。

我迫不及待地想要开始,但是在此之前,我总是要提一提,我们在YouTube频道上为你提供了一个视频版本。

YouTube频道地址:https://youtu.be/y5MN8tcpevA

让我们开始粉碎Node.js!

1、你需要什么来启动Node.js项目?

让我们首先说明从第二点开始对我们来说重要的是什么。

为了能够创建Node.js应用程序,你将需要安装Node.js。 在这里, 你可以查看官方文档并下载安装程序。

你需要做的第二件重要的事情是,为该应用程序安装和创建的PostgreSQL数据库。

然后使用DBeaver这样的数据库工具。

一切准备好了,那就开始开始吧。

2、安装Nest.js CLI并创建一个项目

首先,让我们安装Nest.js CLI,这对创建新项目很有用。为此,请使用以下命令:

$ npm i -g @ nestjs / cl

准备好后,我们可以创建一个新项目。我将创建项目设置为第一课,是为了更加方便介绍。

$ nest new lesson-one

完成后,进入新创建的文件夹,然后添加另一个所需的包!

3、添加Sequalize和Umzug

对于数据库和迁移,我们将使用Sequalize和Umzug,因此我们需要立即安装它们!

因此,让我们开始使用以下命令安装Sequelize和Sequelize Typescript:

$ npm install --save sequelize sequelize-typescript$ npm install pg

安装完成后,可能会缺少两个依赖项,我们必须手动安装它们。让我们使用以下命令来执行此操作:

$ npm install @types/bluebird$ npm install @types/validator

如果没有问题,请跳过此步骤,然后继续安装Umzug。

$ npm install umzug

很好,完成后,我们可以运行后端并开始编码。要运行Nest.js,我们使用 nest start。

4、创建一个数据库模块

让我们从在./src 文件夹中创建一个新文件夹开始, 并将其称为 modules。完成后,请在该文件夹内创建另一个文件夹并命名为 database。

在 ./src/modules/database 我们创建两个文件中, database.module.ts 然后 database.provider.ts 从提供者开始,然后在其中添加以下代码。

import { Sequelize } from 'sequelize-typescript';
export const databaseProvider = [  {    provide: 'SEQUELIZE',    useFactory: async () => {      const sequelize = new Sequelize({        dialect: 'postgres',        host: <YOUR_HOST>,        port: 5432,        username: <YOUR_USERNAME>,        password: <YOUR_PASSWORD>,        database: <YOUR_DB_NAME>      });      sequelize.addModels([]);      return sequelize;    }  }]

切记更改占位符并设置你的数据库。

完成后,让我们打开 database.module.ts 并在其中添加代码,如下所示。

import { Module } from '@nestjs/common';import { databaseProvider } from './database.provider';
@Module({  providers: [...databaseProvider],  exports: [...databaseProvider]})
export class DatabaseModule { }

很好,此步骤的最后一个元素是将数据库模块添加到我们的 app.module.ts 文件中,因此让我们打开它,并确保你的代码如下所示。

import { Module } from '@nestjs/common';import { AppController } from './app.controller';import { AppService } from './app.service';import { DatabaseModule } from './modules/database/database.module';
@Module({  imports: [    DatabaseModule,  ],  controllers: [AppController],  providers: [AppService],})export class AppModule {}

 5、创建迁移

现在,我们将设置迁移文件。让我们转到项目的根文件并创建一个 migrate.ts 文件。在此文件中,我们将连接数据库并设置umzug的实例。

import { Sequelize } from 'sequelize-typescript';import Umzug = require('umzug');
const sequelize = new Sequelize({  dialect: 'postgres',  host: 'YOUR_HOST',  port: 5432,  username: 'YOUR_USERNAME',  password: 'YOUR_PASSWORD',  database: 'YOUR_DB_NAME'});
const umzug = new Umzug({  storage: 'sequelize',  storageOptions: { sequelize },  logging: false,  migrations: {    params: [      sequelize,      sequelize.constructor,    ],    path: './src/migrations',    pattern: /\.ts$/,  },});
const task = (process.argv[2] || '').trim();
switch (task) {  case 'up':    umzug.up()      .then((result) => {        console.log('Migrations up went successful!', result);        process.exit(0);      });    break;  case 'down':    umzug.down()      .then((result) => {        console.log('Migrations down went successful!', result);        process.exit(0);      });    break;  default:    break;};

太好了,现在我们将在该./src 文件夹中创建一个用于迁移的 文件夹。在新文件夹中,我们将为我们要在数据库中创建的两个表创建两个文件。我们称它们为 1.1users.ts 和 1.2accounts.ts。

在第一个文件中,我们将创建 up() 和 down() 运行。让我们在1.1users.ts 文件中使用以下代码 :

import * as Sequelize from 'sequelize';
const tableName = 'Users';
export async function up(i: any) {  const queryInterface = i.getQueryInterface() as Sequelize.QueryInterface;  queryInterface.createTable(tableName, {    id: {      type: Sequelize.INTEGER,      allowNull: false,      autoIncrement: true,      unique: true,      primaryKey: true,    },    Username: {      type: Sequelize.CHAR(200),      allowNull: false,    },    Email: {      type: Sequelize.CHAR(50),      allowNull: false,    },    Password: {      type: Sequelize.CHAR(250),      allowNull: false,    },  });};
export async function down(i: any) {  const queryInterface = i.getQueryInterface() as Sequelize.QueryInterface;  queryInterface.dropTable(tableName);}

和1.2accounts.ts 文件中的代码 将非常相似:

import * as Sequelize from 'sequelize';
const tableName = 'Accounts';
export async function up(i: any) {  const queryInterface = i.getQueryInterface() as Sequelize.QueryInterface;  queryInterface.createTable(tableName, {    id: {      type: Sequelize.INTEGER,      allowNull: false,      autoIncrement: true,      unique: true,      primaryKey: true,    },    Type: {      type: Sequelize.CHAR(200),      allowNull: false,    },    Name: {      type: Sequelize.CHAR(200),      allowNull: false,    },    Balance: {      type: Sequelize.INTEGER,      allowNull: true,    },    UserId: {      type: Sequelize.INTEGER,      references: {        model: 'Users',        key: 'id',      },    },  });};
export async function down(i: any) {  const queryInterface = i.getQueryInterface() as Sequelize.QueryInterface;  queryInterface.dropTable(tableName);}

到这里,我们只差一步了。
我们打开 package.json 文件,然后添加一个新命令如下:

  {    “ migrate”:“ ts-node ./migrate.ts”,    ...  }

现在,我们准备好运行迁移了。

6、运行迁移

运行迁移是本课程的最后一步。让我们打开控制台并运行以下代码进行迁移:

 $ npm run migrate up

完成后,你可以在任何数据库工具(如DBeaver)中检查数据库,你将看到两个通过UserId连接的新表。

现在,你可以检查向下迁移是否也起作用。撤消迁移是一项一项的工作,因此,如果你对两个表进行了迁移,则需要向下运行两次迁移以撤消两个表。

要撤消迁移,请运行以下命令:

  $ npm run migrate down

完成后,你可以检查表是否已撤消。

结论

最后恭喜你,当你看到这里的时候,你已经完成了Node.js课程的第一课内容的学习,并且已经为你的项目准备好构建API。

在下一课中,我们将讲述构建注册功能。

感谢阅读。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值