01.Node.js+TS全栈开发-服务端篇

259 阅读2分钟

本章开始将进行服务端的实战开发,包含了 Express、MongoDB以及其他涉及到的中间件的模块。

[toc]

环境搭建

  • 安装 18.0 或更高版本的 Node.js nodejs.org/en/about/pr…
  • 安装 Express: www.npmjs.com/package/exp…
  • 安装 @types/express: 用于express的TS类型声明
  • 安装 TypeScript: www.typescriptlang.org/
  • 安装 ts-node-dev: 用于当任何所需的文件发生更改(作为标准node-dev )时,它会重新启动目标节点进程,但在重新启动之间共享Typescript 编译过程
  • 提前安装好MongoDB数据库用于数据存储
  • 安装mongoose,Node.js操作MongoDB数据库所需的lib
  • 安装@types/mongoose 用于mongoose 的TS类型声明
  • 安装dotenv,用于将环境变量从 .env 文件加载到 process.env 中。将配置存储在与代码分开的环境中

安装过程自己查看文档,需要读者提前对express,MongoDB具备一定前置知识

初始化项目

  1. 在命令行中运行以下命令 (不要带上 $ 符号):
$ npm init -y 略。。。。
  1. 拆分项目结构

项目初始化完成后,在根目录下新建src文件夹,并创建如下项目结构

其中,app.ts负责管理Express服务器的运行,server.ts负责整个项目(含服务器+数据库)的运行

  1. 开始编码

app.ts

import express, { Application } from "express";
const app: Application = express();//实例化express服务器
export default app;

.env

DB_USER=admin //定义数据库用户名,根据自身情况决定
DB_PASSWORD=xxxxxxxx//数据库密码

server.ts

import mongoose from "mongoose";
import app from "./app";//引入express初始化代码
const port = process.env.PORT || 5000;//定义服务端运行端口

//Dotenv 是一个零依赖模块,它将环境变量从 .env 文件加载到 process.env 中。将配置存储在与代码分开的环境中
require("dotenv").config();
// 连接到数据库
const mongoUrl = `mongodb://${process.env.DB_USER}:${process.env.DB_PASSWORD}@localhost:27017/databaseName`;
//连接的配置选项
const mongooseOptions: any = {
  //useNewUrlParser: true,
  //useUnifiedTopology: true,
  //连接超时时间
  serverSelectionTimeoutMS: 30000, //  Set a longer timeout ( default  is  30000 )
};

async function mongodbConnect() {
  try {
    await mongoose.connect(mongoUrl, mongooseOptions);
    console.log("数据库已连接");
    //定义路由与响应
    app.get("/", (req, res) => {
      res.send("Website is running");//服务器响应给客户端的内容
    });
    //开启监听
    app.listen(port, () => {
      console.log(` app listening on port ${port}`);
    });
  } catch (e) {
    console.log("server err", e);
  }
}

mongodbConnect();//连接数据库,并在成功建立连接后启动服务器

package.json

{
  "name": "backend",
  "version": "1.0.0",
  "description": "",
  "main": "src/server.ts",
  "scripts": {
    "dev": "ts-node-dev src/server.ts",
    "test": "echo "Error: no test specified" && exit 1",
    "build": "tsc"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^16.3.1",
    "express": "^4.18.2",
    "mongoose": "^8.0.4"
  },
  "devDependencies": {
    "@types/express": "^4.17.21",
    "@types/mongoose": "^5.11.97",
    "ts-node-dev": "^2.0.0",
    "typescript": "^5.3.3"
  }
}

teconfig.json

{
  "compilerOptions": {
    //设置发出的 JavaScript 的 JavaScript 语言版本并包含兼容的库声明。
    "target": "ES6",
    //指定生成什么模块代码。
    "module": "CommonJS",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true
}
}
  1. 启动项目
pnpm run dev

  1. 访问根路径localhost:5001/验证项目是否顺利启动

可以看到项目已正常启动并收到来自服务器的响应