美文网首页
介绍exress

介绍exress

作者: 逆风飘游的鱼 | 来源:发表于2019-08-13 20:21 被阅读0次

    Express是基于nodejs的web开发框架。优点是易上手、高性能、扩展性强。

    易上手:nodejs最初就是为了开发高性能web服务器而被设计出来的,然而相对底层的API会让不少新手望而却步。express对web开发相关的模块进行了适度的封装,屏蔽了大量复杂繁琐的技术细节,让开发者只需要专注于业务逻辑的开发,极大的降低了入门和学习的成本。

    高性能:express仅在web应用相关的nodejs模块上进行了适度的封装和扩展,较大程度避免了过度封装导致的性能损耗。

    扩展性强:基于中间件的开发模式,使得express应用的扩展、模块拆分非常简单,既灵活,扩展性又强。

    环境准备

    首先,需要安装nodejs,这一步请自行解决。接着,安装express的脚手架工具express-generator,这对于我们学习express很有帮助。

    npm install -g express-generator复制代码

    第一个demo

    利用之前安装的脚手架工具,初始化我们的demo项目。

    按照指引,安装依赖。并启动服务  npm install复制代码

    然后,启动服务器。  express-demo  npm start

    访问浏览器,迈出成功的第一步。

    目录结构介绍

    看下demo应用的目录结构。大部分时候,我们的应用目录结构跟这个保持一致就可以了。也可以根据需要自行调整,express并没有对目录结构进行限制。

    从目录结构可以大致看出,express应用的核心概念主要包括:路由、中间件、模板引擎。

    ├── app.js # 应用的主入口

    ├── bin  # 启动脚本

    ├── node_modules # 依赖的模块

    ├── package.json # node模块的配置文件

    ├── public # 静态资源,如css、js等存放的目录

    ├── routes # 路由规则存放的目录

    └── views # 模板文件存放的目录

    核心概念简介

    上面提到,express主要包含三个核心概念:路由、中间件、模板引擎。

    注意,笔者这里用的是核心概念这样的字眼,而不是核心模块,为什么呢?这是因为,虽然express的中间件有它的定义规范,但是express的内核源码中,其实是没有所谓的中间件这样的模块的。

    中间件:可以毫不夸张的说,在express应用中,一切皆中间件。各种应用逻辑,如cookie解析、会话处理、日志记录、权限校验等,都是通过中间件来完成的。

    路由:地球人都知道,负责寻址的。比如用户发送了个http请求,该定位到哪个资源,就是路由说了算。

    模板引擎:负责视图动态渲染。下面会介绍相关配置,以及如何开发自己的模板引擎。

    核心概念:路由

    路由分类

    粗略来说,express主要支持四种类型的路由,下面会分别举例进行说明

    字符串类型

    字符串模式类型

    正则表达式类型

    参数类型

    路由拆分

    当你用的应用越来越复杂,不可避免的,路由规则也会越来越复杂。这个时候,对路由进行拆分是个不错的选择。

    这样的代码会带来什么问题呢?无论是新增还是修改路由,都要带着/user前缀,这对于代码的可维护性来说是大忌。这对小应用来说问题不大,但应用复杂度一上来就会是个噩梦。

    核心概念:中间件

    一般学习js的时候,我们都会听到一句话:一切皆对象。而在学习express的过程中,很深的一个感受就是:一切皆中间件。比如常见的请求参数解析、cookie解析、gzip等,都可以通过中间件来完成。

    工作机制

    首先,我们自己编写一个极简的中间件。虽然没什么实用价值,但中间件就长这样子。

    参数:三个参数,熟悉http.createServer()的同学应该比较眼熟,其实就是req(客户端请求实例)、res(服务端返回实例),只不过进行了扩展,添加了一些使用方法。

    next:回调方法,当next()被调用时,就进入下一个中间件。

    function logger(req, res, next){

        console.log('here comes request');

        next();

    }复制代码

    应用级中间件 vs 路由级中间件

    根据作用范围,中间件分为两大类:应用级中间件\路由级中间件。

    两者的区别不容易说清楚,因为从本质来讲,两类中间件是完全等同的,只是使用场景不同。同一个中间件,既可以是应用级中间件、也可以是路由级中间件。

    开发中间件

    上面也提到了,中间件的开发是是分分钟的事情,不赘述。

    function logger(req, res, next){

        doSomeBusinessLogic(); // 业务逻辑处理,比如权限校验、数据库操作、设置cookie等

        next();  // 如果需要进入下一个中间件进行处理,则调用next();

    }复制代码

    常用中间件

    包括但不限于如下。更多常用中间件,可以点击 这里

    body-parser

    compression

    serve-static

    session

    cookie-parser

    morgan

    核心概念:模板引擎

    模板引擎大家不陌生了,关于express模板引擎的介绍可以参考官方文档。

    下面主要讲下使用配置、选型等方面的内容。

    可选的模版引擎

    包括但不限于如下模板引擎

    jade

    ejs

    dust.js

    dot

    mustache

    handlerbar

    nunjunks

    配置说明

    先看代码。

    // view engine setup

    app.set('views', path.join(__dirname, 'views'));

    app.set('view engine', 'jade');复制代码

    有两个关于模版引擎的配置:

    views:模版文件放在哪里,默认是在项目根目录下。举个例子:app.set('views', './views')

    view engine:使用什么模版引擎,举例:app.set('view engine', 'jade')

    可以看到,默认是用jade做模版的。如果不想用jade怎么办呢?下面会提供一些模板引擎选择的思路。

    选择标准

    需要考虑两点:实际业务需求、个人偏好。

    首先考虑业务需求,需要支持以下几点特性。

    支持模版继承(extend)

    支持模版扩展(block)

    支持模版组合(include)

    支持预编译

    对比了下,jade、nunjunks都满足要求。个人更习惯nunjunks的风格,于是敲定。那么,怎么样使用呢?

    支持nunjucks

    开发模板引擎

    通过app.engine(engineExt, engineFunc)来注册模板引擎。其中

    engineExt:模板文件后缀名。比如jade。

    engineFunc:模板引擎核心逻辑的定义,一个带三个参数的函数(如下)

    更多内容

    前面讲了一些express的入门基础,感兴趣的同学可以查看官方文档。篇幅所限,有些内容在后续文章展开,比如下面列出来的内容等。

    进程管理

    会话管理

    日志管理

    性能优化

    调试

    错误处理

    负载均衡

    数据库支持

    HTTPS支持

    业务实践

    express官网:expressjs.com/

    相关文章

      网友评论

          本文标题:介绍exress

          本文链接:https://www.haomeiwen.com/subject/ulcijctx.html