前端需要去了解的nodejs知识(express应用搭建)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 这是一个使用typescript和express的应用框架,快速搭建服务端项目。主要模块可以拆分为入口、路由、数据、工具、服务、业务。

网络异常,图片无法展示
|


前言


这是一个使用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。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
16 2
|
6天前
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。
|
7天前
|
Rust 前端开发 JavaScript
前端性能革命:WebAssembly在高性能计算中的应用探索
【10月更文挑战第26天】随着Web应用功能的日益复杂,传统JavaScript解释执行模式逐渐成为性能瓶颈。WebAssembly(Wasm)应运而生,作为一种二进制代码格式,支持C/C++、Rust等语言编写的代码在浏览器中高效运行。Wasm不仅提升了应用的执行速度,还具备跨平台兼容性和安全性,显著改善了Web应用的响应速度和用户体验。
23 4
|
6天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
18 2
|
7天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
14 3
|
7天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
21 2
|
7天前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
21 2
|
8天前
|
前端开发 JavaScript 开发者
“揭秘React Hooks的神秘面纱:如何掌握这些改变游戏规则的超能力以打造无敌前端应用”
【10月更文挑战第25天】React Hooks 自 2018 年推出以来,已成为 React 功能组件的重要组成部分。本文全面解析了 React Hooks 的核心概念,包括 `useState` 和 `useEffect` 的使用方法,并提供了最佳实践,如避免过度使用 Hooks、保持 Hooks 调用顺序一致、使用 `useReducer` 管理复杂状态逻辑、自定义 Hooks 封装复用逻辑等,帮助开发者更高效地使用 Hooks,构建健壮且易于维护的 React 应用。
21 2
|
14天前
|
JavaScript 前端开发 测试技术
前端全栈之路Deno篇(五):如何快速创建 WebSocket 服务端应用 + 客户端应用 - 可能是2025最佳的Websocket全栈实时应用框架
本文介绍了如何使用Deno 2.0快速构建WebSocket全栈应用,包括服务端和客户端的创建。通过一个简单的代码示例,展示了Deno在WebSocket实现中的便捷与强大,无需额外依赖,即可轻松搭建具备基本功能的WebSocket应用。Deno 2.0被认为是最佳的WebSocket全栈应用JS运行时,适合全栈开发者学习和使用。
|
9天前
|
前端开发 API UED
深入理解微前端架构:构建灵活、高效的前端应用
【10月更文挑战第23天】微前端架构是一种将前端应用分解为多个小型、独立、可复用的服务的方法。每个服务独立开发和部署,但共同提供一致的用户体验。本文探讨了微前端架构的核心概念、优势及实施方法,包括定义服务边界、建立通信机制、共享UI组件库和版本控制等。通过实际案例和职业心得,帮助读者更好地理解和应用微前端架构。