Express入门看一篇就够了

Express是一个流行的Node.js Web应用程序框架,它可以帮助我们快速构建高效的Web应用程序。本文将介绍如何安装、使用Express框架来构建Web应用程序,包括路由、中间件、数据库集成、错误处理以及部署和优化等方面。

一、安装

在安装Express框架之前,需要先安装Node.js。安装完成后,可以使用npm命令来安装Express框架。

1.1 安装Node.js

访问Node.js官网(https://nodejs.org/),下载适合自己操作系统的安装包。

打开安装包,按照提示进行安装。

1.2 安装Express框架

打开终端(Windows下为命令提示符或PowerShell,Mac和Linux下为终端)。

输入以下命令来安装Express:

npm install express

如果需要安装指定版本的Express框架,可以使用以下命令:

npm install [email protected]

二、基础用法

使用Express框架创建一个简单的Web应用程序非常容易,只需几行代码即可完成。

下面是一个例子:

const express = require('express')
const app = express()

app.get('/', (req, res) => { 
    res.send('你好! 香菜的开发日记!') 
});

app.listen(8080, () => { 
    console.log('http://127.0.0.1:8080') 
});

在上面的代码中,我们首先导入express模块,然后创建一个app实例。使用app.get()方法定义路由,当Web应用程序收到GET请求时,返回“你好!香菜的开发日记”字符串。

最后,我们使用app.listen()方法指定Web应用程序监听的端口号。

三、路由

路由是Web应用程序中最基本的概念之一,它用于定义客户端请求与服务器响应之间的映射关系。Express框架提供了丰富的路由功能,可以轻松地定义各种类型的路由。

3.1 定义基本路由

在Express框架中,我们可以使用app.get()、app.post()、app.put()和app.delete()等方法定义不同类型的路由。

// GET 请求的路由 
app.get('/', (req, res) => {
    res.send('首页')
})

// POST 请求的路由 
app.post('/api/users', (req, res) => { 
// 处理POST请求 
})

// PUT 请求的路由 
app.put('/api/users/:id', (req, res) => { 
// 处理PUT请求 
})

// DELETE 请求的路由 
app.delete('/api/users/:id', (req, res) => { 
// 处理DELETE请求 
})

在上面的代码中,我们使用app.get()方法定义了一个GET请求的路由,当Web应用程序收到GET请求时,返回“首页”字符串。

同样地,我们可以使用app.post()、app.put()和app.delete()方法分别定义POST、PUT和DELETE请求的路由。

3.2 使用动态路由

动态路由是指在路由路径中包含参数,这些参数可以根据客户端请求的不同值而发生变化。在Express框架中,我们可以使用冒号(:)来定义动态路由参数。下面是一个例子:

app.get('/:id', (req, res) => { 
    res.send(User ID: ${req.params.id});
});

在上面的代码中,我们使用冒号(:)来定义动态路由参数,这个参数的名称是“id”。当客户端访问类型为GET的请求时,Web应用程序将返回“User ID: ”和客户端请求的实际ID值。

3.3 使用路由分组

在大型Web应用程序中,可能需要将路由按照一定的规则进行分组,以便更好地管理和维护。在Express框架中,我们可以使用express.Router()方法来实现路由分组。下面是一个例子:

const express = require('express');
const app = express();

const router = express.Router();

// 定义路由 
router.get('/', (req, res) => { 
    res.send('首页');
});

router.get('/about', (req, res) => { 
    res.send('详情页');
});

// 使用路由 
app.use('/', router);

在上面的代码中,我们首先创建了一个router对象,并使用router.get()方法定义了两个路由。然后,我们使用app.use()方法将router对象与根路径(/)关联起来。这样,当客户端访问根路径或/about路径时,Web应用程序将分别返回字符串。

四、中间件

中间件是在Web应用程序处理请求和响应之间执行的函数。

Express框架提供了丰富的中间件功能,可以帮助我们处理各种复杂的任务,例如身份验证、日志记录、错误处理等。

4.1 定义全局中间件

全局中间件是在Web应用程序处理所有请求和响应之前执行的函数。在Express框架中,我们可以使用app.use()方法定义全局中间件。

// 定义全局中间件,用于记录请求日志 
app.use((req, res, next) => { 
    console.log(${new Date().toISOString();
}

在上面的代码中,我们定义了一个全局中间件,当Web应用程序收到任何类型的请求时,都会记录请求的时间戳、请求方法和请求路径。

4.2 定义路由级中间件

路由级中间件是只对特定路由生效的中间件。

在Express框架中,我们可以使用router.use()方法定义路由级中间件。

const express = require('express');
const app = express();

const router = express.Router();

// 定义路由级中间件,用于身份验证 
router.use((req, res, next) => { 
    if (req.isAuthenticated()) { 
        return next() 
    } 
    res.redirect('/login');
});

// 定义路由和请求处理程序 
router.get('/', (req, res) => {
 res.send('Home Page');
});

// 使用路由 
app.use('/', router);

在上面的代码中,我们定义了一个路由级中间件,用于验证客户端是否已经通过身份验证。如果客户端已经通过身份验证,则继续执行下一个中间件或路由处理程序;否则,将客户端重定向到登录页面。

4.3 使用第三方中间件

除了内置的中间件之外,Express框架还支持使用第三方中间件。

例如,我们可以使用body-parser中间件来处理POST请求中的表单数据。

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// 定义路由和请求处理程序 
app.post('/api/users', (req, res) => { 
    const { name, email } = req.body;
    // 处理 POST 请求并返回数据 
    res.send(User Created: ${name} - ${email});
});

在上面的代码中,我们首先使用require()函数导入body-parser模块,然后使用app.use()方法注册它。这样,当Web应用程序收到POST请求时,body-parser中间件将自动处理请求并将表单数据解析为JSON格式的对象。

五、数据库集成

在现代Web应用程序中,数据库集成是一项非常重要的任务。使用数据库,我们可以轻松地存储和检索各种数据,例如用户配置文件、文章内容等。

在Express框架中,我们可以使用各种数据库集成工具来实现与数据库的交互。

5.1 连接MongoDB数据库

Mongoose是一个流行的MongoDB对象模型库,它允许我们定义数据模式并将其映射到MongoDB数据库中的集合。下面是使用mongoose连接MongoDB数据库的一个例子:

const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/my_database', { useNewUrlParser: true })

const userSchema = new mongoose.Schema({
  name: String,
  email: String
})

const User = mongoose.model('User', userSchema)

// 定义路由和请求处理程序
app.post('/api/users', async (req, res) => {
  const { name, email } = req.body
  const newUser = new User({ name, email })
  await newUser.save()
  res.send(`User Created: ${name} - ${email}`)
})

在上面的代码中,首先使用 mongoose.connect() 方法连接到MongoDB数据库。

然后,使用mongoose.Schema()方法定义一个名为userSchema的数据模式,并使用mongoose.model()方法将其映射到名为“User”的数据库集合。

最后,使用User.create()方法创建一个新的用户记录,并将其保存到数据库中。

5.2 使用Sequelize连接MySQL数据库

Sequelize是一个流行的MySQL对象模型库,它允许我们定义数据模式并将其映射到MySQL数据库中的表格。

const Sequelize = require('sequelize')
const sequelize = new Sequelize('数据库名称', '用户名', '密码', { host: 'localhost', dialect: 'mysql' })

const User = sequelize.define('user', { 
    name: Sequelize.STRING,
    email: Sequelize.STRING
})

// 定义路由和请求处理程序
app.post('/api/users', async (req, res) => {
    const { name, email } = req.body
    await User.create({ name, email })
    res.send(User Created: ${name} - ${email})
})

首先使用Sequelize构造函数创建一个sequelize实例,并使用sequelize.define()方法定义一个名为User的模型。模型定义了数据表的结构和字段类型。

然后,可以使用User.create()方法创建一个新的用户记录,并将其保存到数据库中。

六、错误处理

在Web应用程序开发中,错误处理是一个重要的方面。在Express框架中,我们可以使用中间件来处理各种类型的错误,以便提供更好的用户体验。

6.1 基本的错误处理

在Express框架中,我们可以使用app.use()方法定义一个错误处理中间件。

// 定义错误处理中间件 
app.use((err, req, res, next) => { 
    console.error(err);
    res.status(500).send('服务器错误');
});

在上面的代码中,我们定义了一个错误处理中间件,当其他中间件或路由处理程序抛出错误时,该中间件将被调用。在这个例子中,我们只是简单地打印错误信息并返回一个“服务器错误”的响应。

6.2 自定义错误处理

除了基本的错误处理中间件之外,我们还可以定义自定义的错误处理中间件,以处理特定类型的错误。

定义错误处理中间件:

const express = require('express')
const app = express()

// 定义全局中间件,用于记录请求日志
app.use((req, res, next) => {
  console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`)
  next()
})

// 定义路由和请求处理程序
app.get('/', (req, res) => {
  throw new Error('报错~~')
})

// 定义错误处理中间件
app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).send('错误')
})

使用错误日期记录中间件:

const express = require('express')
const app = express()

const fs = require('fs')
const path = require('path')

// 定义全局中间件,用于记录请求日志
app.use((req, res, next) => {
  console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`)
  next()
})

// 定义路由和请求处理程序
app.get('/', (req, res) => {
  throw new Error('报错~~')
})

// 定义错误处理中间件
app.use((err, req, res, next) => {
  console.error(err.stack)
  // 记录错误日志
  const logFilePath = path.join(__dirname, 'error.log')
  fs.appendFileSync(logFilePath, `${new Date().toISOString()} - ${err.stack}\n`)
  res.status(500).send('错误')
})

七、部署和优化

在完成Web应用程序的开发之后,我们需要将其部署到生产环境,并进行一些优化操作,以提高性能和安全性。

7.1 PM2基础命令

7.1.1 安装PM2:

npm install -g pm2

7.1.2 启动应用:

pm2 start app.js

7.1.3 停止应用:

pm2 stop app.js

7.1.4 重启应用:

pm2 restart app.js

7.2 部署到生产环境

在将Express应用程序部署到生产环境之前,我们可以使用工具如PM2来管理和监控我们的应用。

 npm install -g pm2
pm2 start app.js --name my-app

在上面的代码中,我们首先使用npm命令安装PM2工具。然后,使用pm2 start命令启动我们的应用,并指定应用的名称为“my-app”。

未完待续...

 

你可能感兴趣的:(express,express)