Nodejs-Express框架

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本质上是一个函数:createApplication
const express = require('express')
// 创建app
const app = express();

// 监听默认路径
// get
app.get('/', (req, res, next) => {
  res.end("hello express")
})

// post
app.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本质上是一个函数:createApplication
const express = require('express')
const userRouter = require('./routers/users')
// 创建app
const app = express();

// 注册路由
app.use("/users", userRouter)
app.use("/products", productRouter)

// 开启监听
app.listen(8000, () => {
  console.log('express路由服务器启动成功')
})

9. 静态资源服务器

Node也可以作为静态资源服务器,并且express给我们提供了方便部署静态资源的方法;

Nodejs-Express框架_第1张图片

10. 服务端的错误处理

// express本质上是一个函数:createApplication
const express = require('express')
// 创建app
const 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 = 400
  let 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服务器启动成功')
})

你可能感兴趣的:(express,node.js)