Express 备忘清单

这是用于 Node.js 的快速、不拘一格、极简主义的 Web 框架,包含 Express.js 的 API 参考列表和一些示例。

入门

Hello World

  • 创建项目,添加 package.json 配置
    1. $ mkdir myapp # 创建目录
    2. $ cd myapp # 进入目录
    3. $ npm init -y # 初始化一个配置
  • 安装依赖
    1. $ npm install express # 安装依赖
  • 入口文件 index.js 添加代码:
    1. const express = require('express')
    2. const app = express()
    3. const port = 3000
    4. app.get('/', (req, res) => {
    5. res.send('Hello World!')
    6. })
    7. app.listen(port, () => {
    8. console.log(`监听端口${port}示例应用`)
    9. })
  • 使用以下命令运行应用程序
    1. $ node index.js

express -h

  1. Usage: express [options] [dir]
  2. Options:
  3. -h, --help 输出使用信息
  4. --version 输出版本号
  5. -e, --ejs 添加 ejs 引擎支持
  6. --hbs 添加 hbs 引擎支持
  7. --pug 添加 pug 引擎支持
  8. -H, --hogan 添加 hogan.js 引擎支持
  9. --no-view 无视图引擎生成
  10. -v, --view <engine> 添加视图 <engine> 支持 (ejs|hbs|hjs|jade|pug|twig|vash) (默认jade)
  11. -c, --css <engine> 添加样式表 <engine> 支持 (less|stylus|compass|sass) (默认css)
  12. --git 添加 .gitignore
  13. -f, --force 强制非空目录

创建一个 myapp 的项目

  1. $ express --view=pug myapp
  2. # 运行应用程序
  3. $ DEBUG=myapp:* npm start

express()

:- :-
express.json() #
express.raw() #
express.Router() #
express.static() #
express.text() #
express.urlencoded() #

Router

:- :-
router.all() #
router.METHOD() #
router.param() #
router.route() #
router.use() #

Application

  1. var express = require('express')
  2. var app = express()
  3. console.dir(app.locals.title)
  4. // => 'My App'
  5. console.dir(app.locals.email)
  6. // => 'me@myapp.com'

属性

:- :-
app.locals 应用程序中的局部变量 #
app.mountpath 安装子应用程序的路径模式 #

Events

:- :-
mount 子应用挂载到父应用上,子应用上触发事件 #

方法

:- :-
app.all() #
app.delete() #
app.disable() #
app.disabled() #
app.enable() #
app.enabled() #
app.engine() #
app.get(name) #
app.get(path, callback) #
app.listen() #
app.METHOD() #
app.param() #
app.path() #
app.post() #
app.put() #
app.render() #
app.route() #
app.set() #
app.use() #

Request

属性

:- :-
req.app #
req.baseUrl #
req.body #
req.cookies #
req.fresh #
req.hostname #
req.ip #
req.ips #
req.method #
req.originalUrl #
req.params #
req.path #
req.protocol #
req.query #
req.route #
req.secure #
req.signedCookies #
req.stale #
req.subdomains #
req.xhr #

方法

:- :-
req.accepts() #
req.acceptsCharsets() #
req.acceptsEncodings() #
req.acceptsLanguages() #
req.get() 获取HTTP 请求头字段 #
req.is() #
req.param() #
req.range() #

Response

  1. app.get('/', function (req, res) {
  2. console.dir(res.headersSent) // false
  3. res.send('OK')
  4. console.dir(res.headersSent) // true
  5. })

属性

:- :-
res.app #
res.headersSent #
res.locals #

方法

:- :-
res.append() #
res.attachment() #
res.cookie() #
res.clearCookie() #
res.download() 提示要下载的文件 #
res.end() 结束响应过程 #
res.format() #
res.get() #
res.json() 发送 JSON 响应 #
res.jsonp() 发送带有 JSONP 支持的响应 #
res.links() #
res.location() #
res.redirect() 重定向请求 #
res.render() 渲染视图模板 #
res.send() 发送各种类型的响应 #
res.sendFile() 将文件作为八位字节流发送 #
res.sendStatus() #
res.set() #
res.status() #
res.type() #
res.vary() #

示例

Router

为传递给此路由器的任何请求调用

  1. router.use(function (req, res, next) {
  2. // .. 这里有一些逻辑 .. 像任何其他中间件一样
  3. next()
  4. })

将处理任何以 /events 结尾的请求

  1. // 取决于路由器在哪里 "use()"
  2. router.get('/events', (req, res, next) => {
  3. // ..
  4. })

Response

res 对象表示 Express 应用程序在收到 HTTP 请求时发送的 HTTP 响应

  1. app.get('/user/:id', (req, res) => {
  2. res.send('user ' + req.params.id)
  3. })

Request

req 对象表示 HTTP 请求,并具有请求查询字符串、参数、正文、HTTP 标头等的属性

  1. app.get('/user/:id', (req, res) => {
  2. res.send('user ' + req.params.id)
  3. })

res.end()

  1. res.end()
  2. res.status(404).end()

结束响应过程。这个方法其实来自 Node 核心,具体是 http.ServerResponseresponse.end() 方法

res.json([body])

  1. res.json(null)
  2. res.json({ user: 'tobi' })
  3. res.status(500).json({ error: 'message' })

app.all

  1. app.all('/secret', function (req, res, next) {
  2. console.log('访问秘密部分...')
  3. next() // 将控制权传递给下一个处理程序
  4. })

app.delete

  1. app.delete('/', function (req, res) {
  2. res.send('DELETE request to homepage')
  3. })

app.disable(name)

  1. app.disable('trust proxy')
  2. app.get('trust proxy')
  3. // => false

app.disabled(name)

  1. app.disabled('trust proxy')
  2. // => true
  3. app.enable('trust proxy')
  4. app.disabled('trust proxy')
  5. // => false

app.engine(ext, callback)

  1. var engines = require('consolidate')
  2. app.engine('haml', engines.haml)
  3. app.engine('html', engines.hogan)

app.listen([port[, host[, backlog]]][, callback])

  1. var express = require('express')
  2. var app = express()
  3. app.listen(3000)

路由

  1. const express = require('express')
  2. const app = express()
  3. // 向主页发出 GET 请求时响应“hello world”
  4. app.get('/', (req, res) => {
  5. res.send('hello world')
  6. })
  1. // GET 方法路由
  2. app.get('/', (req, res) => {
  3. res.send('GET request to the homepage')
  4. })
  5. // POST 方法路由
  6. app.post('/', (req, res) => {
  7. res.send('POST request to the homepage')
  8. })

中间件

  1. function logOriginalUrl (req, res, next) {
  2. console.log('ReqURL:', req.originalUrl)
  3. next()
  4. }
  5. function logMethod (req, res, next) {
  6. console.log('Request Type:', req.method)
  7. next()
  8. }
  9. const log = [logOriginalUrl, logMethod]
  10. app.get('/user/:id', log,
  11. (req, res, next)=>{
  12. res.send('User Info')
  13. }
  14. )

使用模版

  1. app.set('view engine', 'pug')

views 目录下创建一个名为 index.pugPug 模板文件,内容如下

  1. html
  2. head
  3. title= title
  4. body
  5. h1= message

创建一个路由来渲染 index.pug 文件。如果未设置视图引擎属性,则必须指定视图文件的扩展名

  1. app.get('/', (req, res) => {
  2. res.render('index', {
  3. title: 'Hey', message: 'Hello there!'
  4. })
  5. })