走进node.js - Express

103 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情

往期推荐

# 走进 node.js
# 走进 node.js - 起步
# 走进 node.js - 模块
# 走进node.js - NPM
# 走进node.js - package.json
# 走进node.js - 文件
# 走进node.js - 服务端开发
# 走进node.js - 服务端开发2
# 走进node.js - Web

走进node.js - Express 学习目标

  • 使用 Express 处理静态资源
  • Express 路由的基本使用
  • 模板引擎概念
  • 模板引擎的基本使用
  • Express 中间件执行模型
  • Express 重写留言本案例
  • 基于文件的增删改查

原生的 http 模块在某些方面表现不足以应对我们的开发需求,所以我们就需要使用框架来加快我们的开发效率,框架的目的就是提高效率,让我们的代码更统一。在 Node 中,有很多 Web 开发框架,我们这里以学习 Express 为主。

Express

  • Express 是一个基于 Node.js 平台,快速、开放、极简的 web 开发框架。
  • 作者:tj
    • tj 个人博客
    • 知名的开源项目创建者和协作者
    • Express、commander、ejs、co、Koa...
    • 已经离开 Node 社区,转 Go 了
  • 丰富的 API 支持,强大而灵活的中间件特性
  • Express 不对 Node.js 已有的特性进行二次抽象,只是在它之上扩展了 Web 应用所需的基本功能
  • 有很多流行框架基于 Express
  • Express 官网
  • Express 中文文档(非官方)
  • Express GitHub 仓库

安装

# 创建并切换到 myapp 目录
mkdir myapp
cd myapp

# 初始化 package.json 文件
npm init -y

# 安装 express 到项目中
npm i express
  • Hello World

// 0. 加载 Express
const express = require("express");

// 1. 调用 express() 得到一个 app
//    类似于 http.createServer()
const app = express();

// 2. 设置请求对应的处理函数
//    当客户端以 GET 方法请求 / 的时候就会调用第二个参数:请求处理函数
app.get("/", (req, res) => {
  res.send("hello world");
});

// 3. 监听端口号,启动 Web 服务
app.listen(3000, () => console.log("app listening on port 3000!"));

模板引擎

我们可以使用模板引擎处理服务端渲染,但是 Express 为了保持其极简灵活的特性并没有提供类似的功能。

同样的,Express 也是开放的,它支持开发人员根据自己的需求将模板引擎和 Express 结合实现服务端渲染的能力。

配置使用 art-template 模板引擎

这里我们以 art-template 模板引擎为例演示如何和 Express 结合使用。

安装:npm install art-template express-art-template

配置:app.engine("html", require("express-art-template"));

使用

app.get("/", function(req, res) {
  // render 方法默认会去项目的 views 目录中查找 index.html 文件
  // render 方法的本质就是将读取文件和模板引擎渲染这件事儿给封装起来了
  res.render("index.html", {
    title: "hello world"
  });
});

如果希望修改默认的 views 视图渲染存储目录,可以: app.set("views", 目录路径);

常见模板引擎

JavaScript 模板引擎有很多,并且他们的功能都大抵相同,但是不同的模板引擎也各有自己的特色。

大部分 JavaScript 模板引擎都可以在 Node 中使用,下面是一些常见的模板引擎。

  • ejs
  • handlebars
  • ade
    • 后改名为 pug
  • nunjucks

中间件函数可以执行以下任何任务:

  • 执行任何代码
  • 修改 request 或者 response 响应对象
  • 结束请求响应周期
  • 调用下一个中间件

分类

  • 应用程序级别中间件
  • 路由级别中间件
  • 错误处理中间件
  • 内置中间件
  • 第三方中间件