Node.js express的基本使用详解

 更新时间:2025年08月08日 09:35:46   作者:会飞的鱼先生  
Express是基于Node.js的轻量级Web框架,封装了HTTP服务、路由管理、中间件等核心功能,简化了Web应用和API开发,这篇文章给大家介绍Node.js express的基本使用,感兴趣的朋友跟随小编一起看看吧

Express 核心概念​

Express是基于Node.js的轻量级Web框架,封装了HTTP服务、路由管理、中间件等核心功能,简化了Web应用和API开发
核心优势​​

  • 中间件架构:支持模块化请求处理流程
  • 路由系统:直观的URL到处理函数的映射
  • 高性能:非阻塞I/O模型与事件驱动机制

基础使用​

  • 安装express
npm init
npm i express
  • 快速入门
// index.js
const express = require('express');
const port = 3000;
const app = express();
app.get('/a',(req,res)=>{
    res.send("Welcome to a Page");
})
app.listen(port,()=>{
    console.log("Server is running on port 3000"); 
})
//执行
// node index.js
// nodemon index.js
// npm run start //package.json中配置

浏览器访问

express 路由

路由确定了应用程序如何响应客户端对特定端点的请求

  • 路由使用
const express = require('express');
const app = express();
// GET 路由
app.get('/home', (req, res) => {
  res.send('网站首页');
});
// 根路由
app.get('/', (req, res) => {
  res.send('首页');
});
// POST 路由
app.post('/login', (req, res) => {
  res.send('登录成功');
});
// 路径参数(规范写法)
app.get('/users/:userId', (req, res) => {
  res.send(`User ID: ${req.params.userId}`); 
});
// 全方法路由
app.all('/search', (req, res) => {
  res.send('1秒钟为您找到相关结果约100,000,000个');
});
// 多方法路由链
app.route('/books')
  .get((req, res) => res.send('Get Books'))
  .post((req, res) => res.send('Add Book'));
// 404 路由
app.all('*', (req, res) => {
  res.send('<h1>404 Not Found</h1>');
});
app.listen(3000);

注意:​
路由路径语法冲突​​app.all(':page(.)')中的 (.)被解析为正则表达式,但 ​​path-to-regexp要求正则部分必须用 /包裹​​。当前写法 :page(.*)会被解析为:

  • :page→ 命名参数
  • (.*)→ 未闭合的正则片段(缺少起始 /),触发语法错误 Unexpected

获取请求参数

app.get('/request', (req, res) => {
  // 获取报文的方式与原生 HTTP 获取方式是兼容的
  console.log(req.method); // GET
  console.log(req.url); // /request
  console.log(req.httpVersion); // 1.1
  console.log(req.headers); // 请求头
  // / express 独有的获取报文的方式
  console.log(req.query); // 查询字符串
  console.log(req.get('host')); // 获取指定的请求头
  res.send('请求报文的获取');
});
// 路径参数
app.get('/users/:userId', (req, res) => {
  res.send(`User ID: ${req.params.userId}`); 
});

express 响应设置

app.get("/response", (req, res) => {
  // 原生HTTP方式
  res.statusCode = 404;
  res.statusMessage = 'Not Found';
  res.setHeader('abc', 'xyz');
  res.write('响应体');
  res.end('结束');
  // Express方式
  res.status(500); // 状态码
  res.set('xxx', 'yyy'); // 响应头
  res.send('中文响应不乱码'); // 响应体
  // 链式调用
  res.status(404).set('xxx', 'yyy').send('你好朋友');
  // 其他响应
  res.redirect('http://example.com'); // 重定向
  res.download('./package.json'); // 文件下载
  res.json({name: 'John'}); // JSON响应
  res.sendFile(__dirname + '/home.html'); // 发送文件
});

注意:出现乱码的情况

  • 响应体中出现乱码
    • 响应头中设置 Content-Type: text/plain; charset=utf-8
  res.writeHead(200, {
    'Content-Type': 'text/html; charset=utf-8' // 明确指定 UTF-8
  });
  res.write('响应体');
  res.end('结束');

express 中间件

中间件(Middleware)本质是一个回调函数,可以访问请求对象(request)和响应对象(response)

  • 全局中间件
// 定义中间件
const logger = (req, res, next) => {
  console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);
  next();
};
// 应用中间件
app.use(logger);
// 多个全局中间件
app.use((req, res, next) => {
  console.log('中间件1');
  next();
});
app.use((req, res, next) => {
  console.log('中间件2');
  next();
});
  • 路由中间件
// 路由中间件(身份验证)
const authMiddleware = (req, res, next) => {
  if (req.query.token === '123') next();
  else res.status(401).send('Unauthorized');
};
const logMiddleware = (req, res, next) => {
  console.log('日志记录');
  next(); 
}
// 单个中间件
app.get('/admin', authMiddleware, (req, res) => {
  res.send('管理员页面--');
});
// 多个中间件
app.get('/dashboard', 
  authMiddleware, 
  logMiddleware, 
  (req, res) => {
    res.send('控制面板--');
  }
);
  • 静态资源中间件
// public目录作为静态资源根目录
app.use(express.static('./public')); 
// 动态路由(注意顺序问题)
app.get('/index.html', (req, res) => {
  res.send('动态首页');
});
  • 关键内置中间件​
// 解析请求体(JSON)
app.use(express.json());
// 解析请求体(表单数据)
app.use(express.urlencoded({ extended: true }));
// 解析Cookie
app.use(cookieParser());
// 解析Session(需要额外配置)
app.use(session({ secret: 'secret', resave: false, saveUninitialized: true }));
// 托管静态资源(public目录)
app.use(express.static('public'));
  • 请求体解析中间件
npm i body-parser
const bodyParser = require('body-parser');
// 处理表单数据
app.use(bodyParser.urlencoded({ extended: false }));
// 处理JSON数据
app.use(bodyParser.json());
app.post('/login', (req, res) => {
  console.log(req.body.username);
  console.log(req.body.password);
  res.send('登录成功');
});

Router 路由模块化

  • 创建路由模块
//routes/userRouter.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
  res.send('用户首页');
});
router.get('/list', (req, res) => {
    res.send('用户列表');
  });
router.get('/:id', (req, res) => {
  res.send(`用户详情: ${req.params.id}`);
});
module.exports = router;
  • 主文件使用路由
const express = require('express');
const app = express();
const userRouter = require('./routes/userRouter');
app.use('/users', userRouter);
app.listen(3000);
// 返回地址:
//  http://localhost:3000/users/   -> 用户首页
//  http://localhost:3000/users/list   -> 用户列表
//  http://localhost:3000/users/11 -> 用户详情: 11

到此这篇关于Node.js- express的基本使用的文章就介绍到这了,更多相关Node.js express使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nodejs如何将高版本降为低版本

    nodejs如何将高版本降为低版本

    在遇到项目依赖低版本Node.js时,直接安装低版本可能会遇到困难,本文提供了一种通过卸载当前高版本Node.js并使用NVM(Node Version Manager)来管理和安装低版本Node.js的方法,首先,需要卸载现有的Node.js环境并清理相关文件
    2024-10-10
  • 使用NRM快速切换npm镜像源的操作指南

    使用NRM快速切换npm镜像源的操作指南

    NRM(Npm Registry Manager) 是一个用于管理 npm 镜像源的命令行工具, 它能帮助开发者快速切换 不同的 npm 源(如官方源、淘宝源、腾讯云源等),本文就给大家介绍了使用NRM快速切换npm镜像源的操作指南,需要的朋友可以参考下
    2025-05-05
  • sublime text配置node.js调试(图文教程)

    sublime text配置node.js调试(图文教程)

    下面小编就为大家分享一篇sublime text配置node.js调试(图文教程),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • node+koa+canvas绘制出货单、收据票据的方法

    node+koa+canvas绘制出货单、收据票据的方法

    在生成票据需求中,我们会想到前端生成或者后端生成返回图片地址访问两个方法,前端生成则不需要调用接口,而后端是在完成整个流程时就进行生成然后把上传的地址保存数据库,这篇文章主要介绍了node+koa+canvas绘制出货单,收据,票据,需要的朋友可以参考下
    2022-09-09
  • 剖析Node.js异步编程中的回调与代码设计模式

    剖析Node.js异步编程中的回调与代码设计模式

    这篇文章主要介绍了Node.js异步编程中的回调与代码设计模式,虽然大多数场合回调编写时的长串括号不怎么好看,但Node的异步性能确实很好,需要的朋友可以参考下
    2016-02-02
  • node.js中 cluster 模块和 worker_threads 模块示例详解

    node.js中 cluster 模块和 worker_threads 模块示例

    这篇文章主要介绍了node.js中 cluster 模块和 worker_threads 模块,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • 又拍云 Node.js 实现文件上传、删除功能

    又拍云 Node.js 实现文件上传、删除功能

    这篇文章主要介绍了又拍云 Node.js 实现文件上传、删除功能,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • 三种Node.js写文件的方式

    三种Node.js写文件的方式

    这篇文章主要为大家详细介绍了三种Node.js写文件的方式,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • node_modules文件夹删除失败的有效解决办法

    node_modules文件夹删除失败的有效解决办法

    在前端开发过程中,node_modules文件夹是一个必不可少的组成部分,里面存放着项目所需的各种依赖包,在实际操作中,很多开发者可能会遇到删除 node_modules 文件夹失败的问题,本文将详细介绍一种简单有效的解决办法,帮助你顺利删除node_modules文件夹,需要的朋友可以参考下
    2024-12-12
  • Node.js readline 逐行读取、写入文件内容的示例

    Node.js readline 逐行读取、写入文件内容的示例

    本篇文章主要介绍了Node.js readline逐行读取、写入文件内容的示例,运用readline逐行读取的两种实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论