📅  最后修改于: 2023-12-03 15:14:57.706000             🧑  作者: Mango
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应用程序。 我们讨论了基础知识,中间件,模板引擎,路由模块化以及其他常见的最佳实践。
随着您的应用程序的规模增加,了解这些最佳实践将变得越来越重要。让我们开始使用它们来构建松散耦合,可扩展和易于维护的应用程序!