本章开始将进行服务端的实战开发,包含了 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具备一定前置知识
初始化项目
- 在命令行中运行以下命令 (不要带上
$符号):
$ npm init -y 略。。。。
- 拆分项目结构
项目初始化完成后,在根目录下新建src文件夹,并创建如下项目结构
其中,app.ts负责管理Express服务器的运行,server.ts负责整个项目(含服务器+数据库)的运行
- 开始编码
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
}
}
- 启动项目
pnpm run dev
- 访问根路径localhost:5001/验证项目是否顺利启动
可以看到项目已正常启动并收到来自服务器的响应