乐趣区

关于javascript:Express入门学习记录

Express 简介

Express 是一个风行的 Node.js Web 应用程序框架,它提供了一组弱小的性能和工具,用于构建 Web 应用程序和 API。它是建设在 Node.js 的 HTTP 模块之上的,通过简化常见工作和提供灵便的路由机制,使得构建 Web 应用程序变得更加疾速和简略。
它是 web 框架,可能提供后端服务能力,并能以相似 JSP 模版的模式渲染 web 页面。

express 个性

express 有两个外围模块——路由和中间件,路由是对申请门路的匹配与解决,中间件则是一个前置办法,比方在申请响应客户端(response to client)之前,你能够通过这个办法对返回的数据进行结构化、过滤或者其余的一些操作。

Express 的根本应用

筹备工作

首先,确保你的电脑上曾经装置了 Node.js。你能够在 Node.js 的官方网站(https://nodejs.org)上找到装置阐明。

创立一个新的 Express 应用程序

mkdir express-demo
cd express-demo
npm init -y

这将创立一个名为 my-express-app 的新文件夹,并在其中创立一个新的 Node.js 我的项目。

装置 express

npm install express

以上命令会将 Express 框架装置在当前目录的 node_modules 目录中

创立一个简略的 Express 应用程序

在 my-express-app 文件夹中创立一个名为 app.js 的新文件

touch app.js

并在其中编写以下代码:

const express = require('express')

const app = express()

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

app.listen(3000, () => {console.log('Server running at http://localhost:3000/')
})

监听 GET 申请

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

参数 1:客户端申请的 url 地址
参数 2:申请对应的处理函数

req:申请对象

  1. req.app:当 callback 为内部文件时,用 req.app 拜访 express 的实例
  2. req.baseUrl:获取路由以后装置的 URL 门路
  3. req.body / req.cookies:取得「申请主体」/ Cookies
  4. req.fresh / req.stale:判断申请是否还「陈腐」
  5. req.hostname / req.ip:获取主机名和 IP 地址
  6. req.originalUrl:获取原始申请 URL
  7. req.params:获取路由的 parameters
  8. req.path:获取申请门路

更多参考 https://expressjs.com/zh-cn/4x/api.html#req

res:响应对象

  1. res.append():追加指定 HTTP 头
  2. res.set()在 res.append()后将重置之前设置的头
  3. res.clearCookie():革除 Cookie
  4. res.download():传送指定门路的文件
  5. res.get():返回指定的 HTTP 头
  6. res.json():传送 JSON 响应
  7. res.send():传送 HTTP 响应
  8. res.status():设置 HTTP 状态码

执行以上代码:

node app.js
利用实例,拜访地址为 localhost:3000

路由

咱们曾经理解了 HTTP 申请的根本利用,而路由决定了由谁 (指定脚本) 去响应客户端申请。在 HTTP 申请中,咱们能够通过路由提取出申请的 URL 以及 GET/POST 参数等。
设想一下你住在一个公寓楼里,而每个房间都有一个房间号。路由就像是这个房间号一样,它通知 Express 应用程序当接管到某个特定的 URL 申请时,该去哪里找到解决这个申请的代码。

const express = require('express')

const app = express()

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

app.listen(3000, () => {console.log('Server running at http://localhost:3000/')
})

app.get('/todos/:id', (req, res) => {res.send(`get /todos/${req.params.id}`)
})

app.post('/todos', (req, res) => {res.send('post /todos')
})

app.patch('/todos', (req, res) => {res.send('patch /todos')
})

app.delete('/delete', (req, res) => {res.send('delete /todos')
})

路由模块化

Express 不倡议将路由间接挂载到 app 上,而是举荐将路由抽离为独自的模块。这是为了避免一旦我的项目大,不不便保护

创立路由模块

// todoRoutes.js

const express = require('express');
const router = express.Router();

// 定义用户路由
router.get('/', (req, res) => {res.send('hello world');
});

router.get('/todos', (req, res) => {res.send('get todos');
});

module.exports = router;

注册路由模块

// app.js

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

const todoRoutes = require('./todoRoutes');

//app.use() 注册全局中间件, 并增加前缀
app.use('/api', todoRoutes);

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

通过这种形式,你能够将不同功能模块的路由别离放在独自的文件中,使得代码更加清晰和易于保护。这种路由模块化的办法使得 Express 应用程序更具可扩展性,

退出移动版