发布于 2026-01-06 0 阅读
0

2022 年 ExpressJS 速查表

2022 年 ExpressJS 速查表

本文假设读者已具备 ExpressJS 的基础知识。如果您是 Express 新手,我建议您先观看以下视频播放列表:

创建新项目

假设您已经安装了NodeJS,只需打开您的IDE并进入一个空文件夹,然后在终端中执行以下操作:

  • 创建一个新的 Node 项目npm init -y

  • 安装依赖项npm install express morgan dotenv

  • 如果你还没有全局安装 nodemon,请安装它。npm install -g nodemon

  • 创建初始服务器文件、.gitignore 文件和 env 文件touch server.js .env .gitignore

  • 将以下内容放入 .gitignore 文件中

.env
/node_modules
Enter fullscreen mode Exit fullscreen mode
  • 将以下内容放入 .env 文件中,该文件用于定义您不希望在代码中公开显示的变量(api 密钥、数据库凭据、敏感信息)或应根据上下文更改的变量。
PORT=5000
Enter fullscreen mode Exit fullscreen mode

package.json

以下是一些我们可以在 package.json 中做的有用事情:

  • 我们可以添加脚本,您可以添加任意数量的脚本,但我建议添加一些基本脚本。
"scripts: {
    "start": "node server.js",
    "dev": "nodemon server.js"
}
Enter fullscreen mode Exit fullscreen mode

可以使用命令运行脚本,npm run <command name>例如,我们可以使用以下命令运行开发脚本npm run dev

  • 我们还可以选择使用 CommonJS 语法还是模块语法。如果不做任何设置,默认使用 CommonJS;但如果我们"type":"module"在 package.json 文件中添加相应的配置,就可以使用模块语法。这会影响我们导入和导出文件的方式。
任务 CommonJS ES模块
导入依赖项/文件 const something = require("something") import something from "something"
从文件导出 module.exports = something export default something

您喜欢哪种方式完全取决于您的个人喜好,但请注意,在旧版本的 Node.js 中可能无法使用 ES Modules 导入 JSON 文件(或者在非常旧的版本中根本无法使用 ES Modules),而在新版本中可以使用实验性标志来实现此功能。

基本服务器设置

CommonJS 版本

// bring in environment variables from a .env file
require("dotenv").config()

// import express and morgan
const express = require("express")
const morgan = require("morgan")

// create an application object
const app = express()

// define a PORT variable from the environment with a default value
const PORT = process.env.PORT || 4000

/////////////////////////////////////
// ALL YOUR MIDDLEWARE AND ROUTES GO HERE
app.use(morgan("tiny")) // middleware for logging
app.use(express.urlencoded({extended: true})) //middleware for parsing urlencoded data
app.use(express.json()) // middleware for parsing incoming json
app.use("/static", express.static("static")) // to set a folder for static file serving
/////////////////////////////////////

// Server Listener
app.listen(PORT, () => console.log(`Listening on port ${PORT}`))
Enter fullscreen mode Exit fullscreen mode

ES模块版本

// Bring in environmental variables
import dotenv from "dotenv"
dotenv.config()

// import express and morgan
import express from "express"
import morgan from "morgan"

// create an application object
const app = express()

// define a PORT variable from the environment with a default value
const PORT = process.env.PORT || 4000

/////////////////////////////////////
// ALL YOUR MIDDLEWARE AND ROUTES GO HERE
app.use(morgan("tiny")) // middleware for logging
app.use(express.urlencoded({extended: true})) //middleware for parsing urlencoded data
app.use(express.json()) // middleware for parsing incoming json
app.use("/static", express.static("static")) // to set a folder for static file serving
/////////////////////////////////////

// Server Listener
app.listen(PORT, () => console.log(`Listening on port ${PORT}`))
Enter fullscreen mode Exit fullscreen mode

中间件

中间件只是接收三个参数的函数:

  • req请求对象,稍后会详细介绍。
  • res响应对象,稍后会详细介绍。
  • next将 req/res 对象传递给下一个中间件或路由的函数。

以下是一个最简单的中间件示例

const middlewareFunction = (req, res, next) => {
 console.log("This is middleware")
}
Enter fullscreen mode Exit fullscreen mode

中间件功能可以通过.use应用程序对象或路由器的方法进行注册。

// using the middleware on all requests
app.use(middlewareFunction)
// using the middleware on certain urls
app.use("/endpoint", middlewareFunction)
Enter fullscreen mode Exit fullscreen mode

前面代码片段中未提及的其他常用中间件包括:

还有很多其他的……

路线

路由决定了服务器对传入请求的响应方式。路由可以通过在应用程序对象或路由器上使用以下方法之一来创建:

  • .all对于任何方法的请求
  • .get对于 GET 请求
  • .post对于 POST 请求
  • .put对于 PUT 请求
  • .delete删除请求

所有这些函数都接受两个参数:

  • 终点
  • req一个接受res参数的“操作”、“控制器”或“路由处理程序”函数

以下是一个例子:

// writing pass an anonymous function
app.get("/endpoint", (req, res) =>  {
  res.send("The Response")
})

// using a named function
function routeHandler(req, res){
  res.send("the response")
}
app.get("/endpoint", routeHandler)
Enter fullscreen mode Exit fullscreen mode

请求对象(res)

请求对象表示来自传入请求的数据,并传递给所有中间件和路由处理程序。

-req.headers包含传入请求头的对象
-req.params包含所有路由参数的对象
-req.query包含 URL 查询字符串中所有键/值对的对象
-req.body包含请求体键/值对的对象(由 express.urlencoded 或 express.json 中间件解析)
-req.method请求方法字符串

以及更多

响应对象(res)

响应对象是一个用于帮助编写请求响应的对象。它主要由用于处理不同类型响应的辅助函数组成。

-res.send根据传入的参数发送文本、HTML 或 JSON 请求
-res.json以 JSON 响应的形式发送 JavaScript 对象或数组
-res.render根据模板渲染 HTML 响应

渲染模板

模板允许您动态生成 html 响应,有几种模板引擎可供使用,以下是一些关于如何使用它们的文章。

要渲染模板,我们使用一个res.render接受两个参数的函数:

  • 要在视图文件夹中找到的文件的名称
  • 包含可用于模板渲染的数据的 JavaScript 对象(每种模板语言都应该有自己在模板中使用该对象数据的方式)。

路由器对象

您可以使用路由器将路由分组在一起,路由器可用于组织路由,并可将中间件应用于特定路由组。

创建路由器

// create the router object
const router = express.Router()
// register it with the application for routes with a certain prefix
app.use("/prefex", router)
Enter fullscreen mode Exit fullscreen mode

就像应用程序对象一样,你可以向路由器注册中间件路由。

// router specific middleware
router.use(middlewareFunction)

// registering routes
router.get("/endpoint", routerHandler) // url is /prefix/endpoint
Enter fullscreen mode Exit fullscreen mode

连接数据库

以下库可以帮助您连接到不同的数据库。

  • 用于连接 Mongoose 数据库的Mongoose博客
  • sequalize ORM 用于 SQL 数据库(postgres、mysql 等)
  • objection ORM 用于 SQL 数据库(postgres、mysql 等)
  • waterline ORM for SQL databases (postgres, mysql 等)

进行 API 调用

请记住,Node.js 中无法直接使用 fetch,而 jQuery 只是一个前端库。不过,您还有一些其他选择。

  • node-fetch是一个复刻浏览器 fetch 函数的库
  • Axios 是一个用于进行 API 调用的库
  • 我有一个用于发起 API 调用的库
  • 需要另一个 HTTP 客户端库
文章来源:https://dev.to/alexmercedcoder/2022-expressjs-cheatsheet-160o