node 基础使用 express

简介: 如果中间件发现错误,服务不会停止,相当于调用了next(错误对象),会继续寻找错误中间件,如果没有,响应500;
// 基础使用express
const express = require('express');
const http = require('http')
// 首先明白express的边界,基于http模块的,处理http请求和响应的作用
// 创建一个服务器,方法一
// const app = express();
// const server =http.createServer(app);
// server.listen(3000, () =>{
//     console.log('the server is listen 3000')
// })
// 创建一个服务器,方法二
const app = express();
app.get('/test/:id/:name', (req, res) => {
    // req 和 res 是被express封装过后的对象
    console.log('请求头', req.headers); // 请求头部对象
    console.log('host', req.headers['host']); // 请求主机
    console.log('path', req.path); // 请求路径
    // 通过query来获取路径上拼接的参数
    console.log(req.query);
    // 通过params来获取动态路由的参数
    console.log(req.params)
    // 设置响应,这里的响应头,响应行和响应体,都被express封装过
    res.setHeader('a', 'a') // 设置响应头
    // res.send('<h1>你好呀</h1>') // 设置响应体
    //  res.send({a:'1',b:'2',c:'3'}) 会自动给响应头加上对呀的 Content-Type: application/json; charset=utf-8
    // 设置响应编码 res.status
    // 设置重定向(3种写法) 301 暂时重定向, 302 永久重定向
    res.status(302).header("location", "https://wwww.baidu.com").end();
    res.status(302).location("https://wwww.baidu.com").end();
    res.redirect(302, 'https://wwww.baidu.com');
})
app.listen(3000, () => {
    console.log('the server is listen 3000')
});
// listen 函数内部实现的原理
// function listen(port, callback){
//     const http = require('http');
//     http.createServer(this).listen(port, callback);
// }


express中间件的匹配规则

当使用app get post

或者其他请求方式匹配到请求后,会交给第一个处理函数来进行处理,然后如果需要移交给下一个请求,那么需要手动的使用next()来给下一个请求。


例如:


app.get('/testExpress', (req, res, next) => {
    // 第一个中间件
    console.log('handler1');
    next();
}, (req, res, next) => {
    // 第二个中间件
    console.log('handler1');
      next();
})
app.get('/testExpress', (req, res, next) => {
    // 第一个中间件
    console.log('handler3');
})


结果如下:


20201219113024784.png


中间件处理细节


1.如果后序没有了中间件,express发现响应没有结束,会自动返回404


2.如果中间件发现错误,服务不会停止,相当于调用了next(错误对象),会继续寻找错误中间件,如果没有,响应500;


错误中间件:


/**
 * 错误处理中间件
 * @param err 错误信息
 * @param req 请求信息
 * @param res 响应信息
 * @param next 调用下一个处理函数
 */
module.exports = function (err, req, res, next) {
    // 如果错误不存在,直接调用后序的中间件
    if (!err) next();
    const errObj = {
        code: 500,
        msg:  err instanceof Error ? err.message : '处理错误'
    }
    res.status(errObj.code).send(errObj);
}


详细使用


const app = express();
app.get('/testExpress', (req, res, next) => {
    // 第一个中间件
    console.log('handler1');
    // throw new Error('我就要报错')
    next(new Error('我就要报错'));
}, (req, res, next) => {
    // 第二个中间件
    console.log('handler1');
    next();
})
app.get('/testExpress', (req, res, next) => {
    // 第一个中间件
    console.log('handler3');
    next()
})
app.use(require('./../middleware/errorMiddleware'));


结果:


20201219115702358.png


内置常用的中间件


// 使用静态资源的中间件
app.use(express.static(path.resolve(__dirname, '../public')));
// 使用urlencode 中间件来获取post contentType= application/x-www-form-urlencoded
app.use(express.urlencoded({extended: true}))
// 使用json 中间件来获取post contentTpe =application/json
app.use(express.json())


相关文章
|
2月前
|
JavaScript 前端开发 中间件
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
|
10天前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
27天前
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。
|
2月前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
52 1
|
22天前
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
37 0
|
22天前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
24天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的融合之道
【10月更文挑战第31天】在追求快速、灵活和高效的后端开发领域,Node.js与Express框架的结合如同咖啡遇见了奶油——完美融合。本文将带你探索这一组合如何让后端服务搭建变得既轻松又充满乐趣,同时确保你的应用能够以光速运行。
27 0
|
2月前
|
JSON JavaScript 前端开发
Node.js Express 框架
10月更文挑战第7天
30 2
|
2月前
|
开发框架 JavaScript 前端开发
使用 Node.js 和 Express 构建 Web 应用
【10月更文挑战第2天】使用 Node.js 和 Express 构建 Web 应用
|
3月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实战指南
【9月更文挑战第6天】在数字化时代的潮流中,后端开发作为支撑现代Web和移动应用的核心,其重要性不言而喻。本文将深入浅出地介绍如何使用Node.js及其流行的框架Express来搭建一个高效、可扩展的后端服务。通过具体的代码示例和实践技巧,我们将探索如何利用这两个强大的工具提升开发效率和应用性能。无论你是后端开发的新手还是希望提高现有项目质量的老手,这篇文章都将为你提供有价值的见解和指导。