网络异常,图片无法展示
|
前言
这是一个使用typescript和express的应用框架,快速搭建服务端项目。主要模块可以拆分为入口、路由、数据、工具、服务、业务。
- 应用整体入口:对整个应用的一个初始化化
- 路由模块:路由的注册
- 数据库模块:数据库连接,Model定义
- 业务功能模块:对应业务模块的逻辑处理
- 公共服务模块:提供一些公共服务,如邮件发送、excel处理等
- 帮助模块:一些工具函数,日志处理,以及环境变量
模块
此框架用到的基础依赖如下:
- typescript
- eslint:代码格式校验
- node/ts-node: 动态编译typescript代码
- nodemon:监听文件变化重启服务
- mongoose:数据库连接
- pm2:生产环境部署,方便服务的重启,以及在线日志的查看
入口
入口文件主要是对整个应用的一个初始化化,包括以下内容:
- 初始化数据库:引入数据模块,进行数据库连接。
- 初始化应用成中间件:使用app.use()注册全局中间件
- 初始化路由:引入路由模块,以及路由404捕获。
- 全局异常捕获: 在文件的最后注册错误捕获中间件函数。
import express from 'express'; import config from './helper/config'; // 数据库初始化 import './database/mongo'; const app = express(); app.use(express.json()); //文档地址 app.use('/documents',express.static(__dirname+'/documents')) // 404路由捕获 app.get('*', function (req, res) { console.log('Not Found'); res.sendStatus(404); }); // 全局错误处理 app.use((err, req, res, next) => { if (res.headersSent) { return next(err); } res.status(500); res.render('error', { error: err }); }); ****
帮助文件
- 全局的环境配置:数据库host、port,应用的host,一些其他和环境相关的配置
- 日志处理,使用nodejs的插件log4js来处理日志,将日志按日期和类型保存在不同的文件中
- 工具函数,定义一些全局的工具函数
- 中间件,定义一些应用层面的中间件
路由
路由是整个express项目的骨架,从路由的定义中应该能够看出整个项目的业务结构。
- 路由注册,根据业务需求定义路由路径
- 路由嵌套根据业务拆分不同路由模块定义在不同的文件中,路由嵌套的设计在express是我们对大型项目解耦的最优方式。
//user.ts const express = require('express'); const router = express.Router(); const app = express(); router.get('/list',(req,res,next)=>{ }); router.post('/info',(req,res,next)=>{ }); export default router
import express from 'express'; import userRouter from './user'; const router = express.Router(); router.use('/user',userRouter); router.get('/demo',(req,res,next)=>{ }); export default router
数据库
- 数据库连接,通过mongoose与数据库创建连接
import mongoose from "mongoose"; import config from '../helpper/config'; const env = process.env.NODE_ENV; const url = `${config[env].mongo_host}:${config[env].mongo_port}` mongoose.connect(url,***) ******
- 数据模型定义,业务对应的数据模型定义
业务模块
拆分不同的业务模块文件,用来处理客户端的请求
import userModel from '../database/model/user'; const createUser = (req,res,next)=>{ ******* } export default {createUser,***}
开发及部署
本地开发
- 安装应用的npm依赖后可通过运行npm run start
pnpm install npm run start
- 设置环境变量,使用插件nodemon和ts-node来启动服务(监听文件变化重启服务)
set NODE_ENV=dev&&nodemon --watch *.ts --exec \"ts-node\" index.ts
生产部署
- 全局安装pm2
pnpm install pm2 -g
- 编译typescript代码并设置环境变量
- 使用pm2启动服务
set NODE_ENV=pro&& pm2 start ./dist/index.js
总结
为了方便日后的开发,根据自己几年express的使用经验对整个应用框架进行的整理。按照高内聚,低耦合的标准进行功能模块和目录的拆分。有兴趣的可以一起维护下,目前准备发到npm。