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

共 5788字,需浏览 12分钟

 ·

2020-10-19 22:58

英文 | 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: , port: 5432, username: , password: , database: }); 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。
在下一课中,我们将讲述构建注册功能。
感谢阅读。

浏览 56
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报