📜  ExpressJS-最佳实践(1)

📅  最后修改于: 2023-12-03 15:14:57.706000             🧑  作者: Mango

ExpressJS-最佳实践

介绍

ExpressJS是一个流行的Node.js框架,可以让开发者快速构建Web应用程序。 在这里,我们将探索如何使用最佳实践来使用ExpressJS,以便您能够构建高质量的,易于维护和扩展的应用程序。

目录
安装

在开始之前,您需要先安装Node.js和npm。请访问Node.js官网以获取更多信息。

在安装Node和npm之后,您可以使用以下命令安装ExpressJS:

npm install express
入门

在了解最佳实践之前,让我们先介绍一些ExpressJS的基础知识。

创建应用程序

要创建一个新的应用程序,您可以创建一个新的文件,例如app.js。然后按照以下方式编写代码:

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

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(3000, () => {
  console.log('Server started on port 3000')
})

在该代码中,我们使用express()函数来创建一个新的Express应用程序。

然后,我们使用app.get()函数来定义路由。在这种情况下,我们定义了根路由(/)并返回一个简单的文本响应“Hello World!”。

最后,我们使用app.listen()函数来启动服务器并侦听端口3000。

路由

在Express中,路由可以简单地定义为URL路径和HTTP请求方法的组合。

例如,要为/users路径定义GET路由,您可以使用以下代码:

app.get('/users', (req, res) => {
  //handle req
})

在这种情况下,我们使用app.get()函数来为路径/users定义一条路由,并传递一个回调函数来处理HTTP请求。

中间件

中间件在Express中是非常重要的概念。中间件是一个函数,它被插入到请求-响应处理流程中。

可以使用中间件来处理请求和响应,或在请求到达路由处理程序之前验证或转换请求。

例如,要定义一个简单的中间件来记录每个请求的时间戳:

app.use((req, res, next) => {
  const timestamp = Date.now()
  console.log(`[${new Date(timestamp).toISOString()}] ${req.method} ${req.url}`)
  next()
})

在这种情况下,我们使用app.use()函数来定义一个中间件。 该中间件将请求的时间戳记录到控制台,并调用next()函数继续流程。

最佳实践

在了解了一些基础知识之后,让我们探索一些最佳实践来使用ExpressJS构建应用程序。

使用配置文件

在Express中,您可以使用配置文件来集中管理应用程序的配置。可以将配置文件存储在文件中,或将其存储在环境变量中。

例如,您可以使用一个简单的JavaScript模块来定义您的配置选项:

module.exports = {
  port: process.env.PORT || 3000,
  database: {
    url: process.env.DATABASE_URL || 'mongodb://localhost/myapp'
  }
}

然后,您可以在应用程序中使用以下代码来加载配置文件:

const config = require('./config')
console.log(`Server listening on port ${config.port}`)

在这种情况下,我们加载定义在./config.js中的配置选项,并将其记录到控制台中。

使用合适的中间件

在Express中,有大量可用的中间件。但是,不是所有的中间件都适合您的应用程序。请确保只使用需要的中间件。

以下是一些常用的中间件:

  • body-parser:处理HTTP请求体
  • cors:允许跨域请求
  • helmet:为应用程序提供安全性
  • compression:压缩响应体

例如,您可以使用以下代码来启用body-parser中间件:

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

const app = express()

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

// Routes...

app.listen(3000, () => {
  console.log('Server started on port 3000')
})

在这种情况下,我们使用body-parser中间件来解析HTTP请求体,并使用两个不同的解析器。

urlencoded()解析器用于表单数据,json()解析器用于JSON数据。

使用路由模块化

当应用程序变得越来越复杂时,将其所有路由放在一个文件中变得越来越困难。这时候路由模块化就非常有用。

在Express中,您可以使用express.Router()函数创建一个路由器实例。然后,您可以将路由添加到该实例中,并最终将路由器实例添加到主应用程序实例中。

例如,您可以使用以下代码来模块化您的路由:

// ./routes/users.js
const express = require('express')
const router = express.Router()

router.get('/', (req, res) => {
  // handle req
})

router.post('/', (req, res) => {
  // handle req
})

module.exports = router
// ./app.js
const express = require('express')
const usersRouter = require('./routes/users')

const app = express()

app.use('/users', usersRouter)

// Other routes...

app.listen(3000, () => {
  console.log('Server started on port 3000')
})

在这种情况下,我们将路由定义保存在一个单独的模块中,并在应用程序主模块中加载它。

错误处理

错误处理是一个重要的部分,它易于被忽略。 在Express中,您可以使用try-catch块来捕获同步错误。也可以使用next(error)函数来将错误传递给下一个中间件。

可以使用中间件来处理常见的错误。 如以下示例中的错误处理程序:

app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).send('Something broke!')
})

在这种情况下,我们使用中间件来处理所有未处理的错误。如果错误被捕捉, 它将被记录到控制台并向客户端发送错误响应。

使用模板引擎

模板引擎是处理和呈现HTML模板的工具。 在Express中,许多模板引擎可供选择。

例如,您可以使用以下代码使用EJS模板引擎:

app.set('view engine', 'ejs')

app.get('/', (req, res) => {
  res.render('index', { title: 'ExpressJS' })
})

在这种情况下,我们使用app.set()函数来设置EJS为我们的模板引擎,并使用res.render()函数将变量渲染到模板中。

使用数据库

在许多Web应用程序中,数据库是不可或缺的组件。 在Express中,你可以使用众多的数据库。

例如,你可以使用以下代码使用Mongoose连接MongoDB:

const mongoose = require('mongoose')
const config = require('./config')

mongoose.connect(config.database.url, { useNewUrlParser: true })

const db = mongoose.connection

db.on('error', console.error.bind(console, 'MongoDB connection error:'))
db.once('open', () => {
  console.log('MongoDB connected!')
})

// Routes...

app.listen(config.port, () =>{
  console.log(`Server listening on port ${config.port}`)
})

在这种情况下,我们使用Mongoose来建立与MongoDB的连接。 连接字符串存储在我们的配置文件中。

结论

在这篇文章中,我们探索了如何使用最佳实践来使用ExpressJS构建Web应用程序。 我们讨论了基础知识,中间件,模板引擎,路由模块化以及其他常见的最佳实践。

随着您的应用程序的规模增加,了解这些最佳实践将变得越来越重要。让我们开始使用它们来构建松散耦合,可扩展和易于维护的应用程序!