1. 安装和创建 Express 应用程序
首先,确保已经在计算机上安装了 Node.js 运行环境。然后,通过以下命令使用 npm 安装 Express:
$ npm install express
安装完成后,你可以创建一个新的 Express 应用程序。在你的项目文件夹中创建一个新的 JavaScript 文件,比如 app.js,并在其中引入 Express:
const express = require('express');
const app = express();
2. 路由和请求处理
Express 使用路由来处理不同的 HTTP 请求。路由定义了请求的 URL 路径和处理程序之间的映射关系。以下是一个简单的路由示例:
app.get('/', (req, res) => {
res.send('Hello, Express!');
});
上述代码定义了一个处理根路径 / 的 GET 请求,并发送响应内容为 'Hello, Express!'。
3. 中间件
Express 的中间件是框架的核心概念之一,它允许你在请求和响应之间执行功能。中间件可以用于处理身份验证、日志记录、错误处理等任务。以下是一个示例中间件的用法:
app.use((req, res, next) => {
console.log('Middleware executed!');
next();
});
上述代码定义了一个简单的中间件函数,它在每个请求被处理之前打印一条消息,并通过调用 next() 方法将请求传递给下一个中间件或路由处理程序。
4. 静态文件服务
Express 提供了一个内置的中间件函数 express.static,用于提供静态文件服务。你可以将静态文件(如 HTML、CSS、JavaScript、图像等)放置在指定的目录下,并将该目录作为参数传递给 express.static 中间件。以下是一个示例:
app.use(express.static('public'));
上述代码将 public 文件夹中的内容作为静态文件提供服务。例如,如果在 public 文件夹中有一个名为 styles.css 的 CSS 文件,可以通过以下 URL 进行访问:http://localhost:3000/styles.css。
5. 请求参数获取
Express 允许你从请求中获取查询参数、路由参数和请求体参数。以下是一些常见的用法示例:
- 获取查询参数:
app.get('/users', (req, res) => {
const name = req.query.name;
// 处理逻辑...
});
- 获取路由参数:
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
// 处理逻辑...
});
- 解析请求体参数:
app.use(express.json());
app.post('/users', (req, res) => {
const name = req.body.name;
// 处理逻辑...
});
6. 视图模板引擎
Express 支持使用视图模板引擎来动态生成 HTML 页面。常见的视图模板引擎包括 EJS、Pug(之前称为 Jade)、Handlebars 等。以下是一个使用 EJS 视图模板引擎的示例:
首先,安装 EJS:
$ npm install ejs
然后,在 Express 应用程序中配置 EJS:
app.set('view engine', 'ejs');
接下来,创建一个名为 index.ejs 的模板文件,并在其中定义模板的内容。在路由处理程序中使用 res.render 方法来渲染模板并发送响应:
app.get('/', (req, res) => {
res.render('index', { title: 'Express App' });
});
7. 错误处理
Express 提供了一种处理错误的机制,可以通过中间件来捕获和处理应用程序中的错误。以下是一个简单的错误处理中间件的示例:
app.use((err, req, res, next) => {
console.error(err);
res.status(500).send('Internal Server Error');
});
上述代码定义了一个捕获错误的中间件函数,会打印错误消息并发送一个 500 状态码的响应。
8. 运行 Express 应用程序
最后,使用以下命令来启动 Express 应用程序:
$ node app.js
默认情况下,Express 应用程序将在本地主机的 3000 端口上监听请求。你可以在浏览器中访问 http://localhost:3000 来查看应用程序的响应。