1. 认识Web框架
目前在Node中比较流行的Web服务器框架是express、koa;express早于koa出现,并且在Node社区中迅速流行起来:可以基于express快速、方便的开发自己的Web服务器;并且可以通过一些实用工具和中间件来扩展自己功能;Express整个框架的核心就是中间件
2.Express安装
express的使用过程有两种方式:
方式一:通过express提供的脚手架,直接创建一个应用的骨架;方式二:从零搭建自己的express应用结构;
方式一:安装express-generator
安装脚手架
npm install -g express-generator
创建项目
express express-demo
安装依赖
npm install
启动项目
node bin/www
方式二:从零搭建自己的express应用结构;
npm init -y
3. Express的基本使用
// express本质上是一个函数:createApplicationconst express = require('express')// 创建appconst app = express();// 监听默认路径// getapp.get('/', (req, res, next) => {res.end("hello express")})// postapp.post('/', (req, res, next) => {res.end('hello post express')})// 开启监听app.listen(8000, () => {console.log('express服务器启动成功')})
4.认识中间件
Express是一个路由和中间件的Web框架,它本身的功能非常少:Express应用程序本质上是一系列中间件函数的调用;中间件的本质是传递给express的一个回调函数;这个回调函数接受三个参数: 请求对象(request对象);响应对象(response对象);next函数(在express中定义的用于执行下一个中间件的函数);中间件中可以执行哪些任务 执行任何代码;更改请求(request)和响应(response)对象;结束请求-响应周期(返回数据);调用栈中的下一个中间件;const express = require('express')const app = express();// 编写普通的中间件// use注册一个中间件(回调函数)app.use((req, res, next) => {console.log('注册了01普通中间件')res.end('hello world')next()})app.use((req, res, next) => {console.log('注册了02普通中间件')next()})app.use((req, res, next) => {console.log('注册了03普通中间件')})app.listen(8000, () => {console.log('普通中间件启动成功')})
5.应用中间件 – 自己编写
express主要提供了两种方式:app/router.use和app/router.methods;
6.客户端发送请求的方式
方式一:通过get请求中的URL的params;方式二:通过get请求中的URL的query;方式三:通过post请求中的body的json格式;方式四:通过post请求中的body的x-www-form-urlencoded格式;方式五:通过post请求中的form-data格式;7. 响应数据
end方法
类似于http中的response.end方法,用法是一致的
json方法
json方法中可以传入很多的类型:object、array、string、boolean、number、null等,它们会被转换成 json格式返回;
status方法
用于设置状态码
8.Express的路由
以使用 express.Router来创建一个路由处理程序:
一个Router实例拥有完整的中间件和路由系统;
user.js
const express = require('express')const router = express.Router()router.get('/', (req, res, next) => {res.json(["why", "kobe", "lilei"])})router.get('/:id', (req, res, next) => {res.json(`${req.params.id}用户的信息`)})router.post('/', (req, res, next) => {res.json("create user success")})module.exports = router
// express本质上是一个函数:createApplicationconst express = require('express')const userRouter = require('./routers/users')// 创建appconst app = express();// 注册路由app.use("/users", userRouter)app.use("/products", productRouter)// 开启监听app.listen(8000, () => {console.log('express路由服务器启动成功')})
9.静态资源服务器
Node也可以作为静态资源服务器,并且express给我们提供了方便部署静态资源的方法;
10.服务端的错误处理
// express本质上是一个函数:createApplicationconst express = require('express')// 创建appconst app = express();const USERNAME_DOES_NOT_EXISTS = "USERNAME_DOES_NOT_EXISTS";const USERNAME_ALREADY_EXISTS = "USERNAME_ALREADY_EXISTS";app.post('/login', (req, res, next) => {// 加入在数据中查询用户名时, 发现不存在const isLogin = false;if (isLogin) {res.json("user login success~");} else {// res.type(400);// res.json("username does not exists~")next(new Error(USERNAME_DOES_NOT_EXISTS));}})app.post('/register', (req, res, next) => {// 加入在数据中查询用户名时, 发现不存在const isExists = true;if (!isExists) {res.json("user register success~");} else {// res.type(400);// res.json("username already exists~")next(new Error(USERNAME_ALREADY_EXISTS));}});app.use((err, req, res, next) => {let status = 400let message = "";switch(err.message) {case USERNAME_DOES_NOT_EXISTS:message = "username does not exists~"break;case USERNAME_ALREADY_EXISTS:message = "username alreday exists~"break;default:message = "NOT FOUND~"}res.status(status)res.json({errCode: status,errMessage: message})})// 开启监听app.listen(8000, () => {console.log('express服务器启动成功')})