http

  1. const http = require('http');
  2. http.createServer((res, req) => {
  3. // 处理不同请求,需要写大量的判断
  4. })
  1. 根据不同的请求路径,请求的方法,做不同的事情,处理起来比较麻烦
  2. 读取请求体和写入响应体是通过流的方式处理的,比较麻烦

使用第三方库

  1. express 生态完整
  2. koa2 api更加先进

官网:https://www.expressjs.com.cn/4x/api.html

使用

第一种方式

  1. const http = require('http');
  2. const express = require('express');
  3. const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
  4. const server = http.createServer(app);
  5. server.listen(12306, () => {
  6. console.log('server on 12306 has start')
  7. })

第二种方式

  1. const express = require('express');
  2. const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
  3. app.listen(12306, () => {
  4. console.log('server on 12306 has start')
  5. })

创建一个服务,监听12306端口

REST风格的Api接口

/api/student post 添加学生
/api/student/id get 获取学生
/api/student/:id put 修改学生
/api/student/:id delete 删除学生

同一个接口,根据不同的请求方式,来出来不同类型的操作,例如

  1. app.get('/student') // 获取学生
  2. app.put('/student/:id') // 修改学生;
  3. app.delete('/student/:id') // 删除学生;
  4. app.post('/student')// 提交学生

创建一个api

  1. const express = require('express');
  2. const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
  3. // 配置一个请求应映射,如果路径和方法都满足匹配,交给处理函数进行处理
  4. app.get('/getHeader/:id', (req, resp) => {
  5. // rep和req是被express封装后的对象
  6. // 请求信息
  7. console.log('请求头', req.headers);
  8. console.log('请求路径', req.path);
  9. console.log('请求参数', req.query);
  10. console.log('请求动态参数', req.params)
  11. // 相应信息, 请求头里面的Content-Type会根据传入的值,自动的添加上,不需要想http一样自己写判断
  12. // resp.send('<h1>你好</h1>') // 字符串
  13. // resp.send([1, 2, 3]); // 数组
  14. // resp.send({ name: '蓝瞳', age: 18 }) // 对象
  15. // 设置header后,发送信息
  16. // resp.setHeader('data-sources', 'recuit');
  17. // resp.send([1, 2, 3]);
  18. // 设置状态码
  19. // resp.status(302).header('location', 'https://www.baidu.com').end(); // 不适用send返送消息,需要手动end(),防止客户端一直等待响应信息
  20. // 简写
  21. // resp.status(302).location("https://www.baidu.com").end();
  22. // 最简简单单
  23. // resp.redirect('https://www.baidu.com', 302);// 设置重定向状态码,默认是是301 过时了
  24. // resp.redirect(302,''https://www.baidu.com');// 设置重定向状态码,默认是是301 新方法
  25. })
  26. // 请求是 rest风格
  27. // app.get('/student') // 获取学生
  28. // app.put('/student/:id') // 修改学生;
  29. // app.delete('/student/:id') // 删除学生;
  30. // app.post('/student')// 提交学生
  31. // app.get('*')// 匹配所有的的get请求接口
  32. app.listen(12306, () => {
  33. console.log('server on 12306 has start')
  34. })
  1. 设置响应信息 ```javascript const express = require(‘express’); const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数

// 配置一个请求应映射,如果路径和方法都满足匹配,交给处理函数进行处理 app.get(‘/getHeader/:id’, (req, resp) => { // rep和req是被express封装后的对象 // 相应信息, 请求头里面的Content-Type会根据传入的值,自动的添加上,不需要想http一样自己写判断 resp.send(‘

你好

‘) // 字符串 resp.send([1, 2, 3]); // 数组 resp.send({ name: ‘蓝瞳’, age: 18 }) // 对象

}) app.listen(12306, () => { console.log(‘server on 12306 has start’) })

  1. > 相应信息, 请求头里面的Content-Type会根据传入的值,自动的添加上,不需要想http一样自己写判断
  2. 2. 获取请求头信息
  3. ```javascript
  4. const express = require('express');
  5. const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
  6. // 配置一个请求应映射,如果路径和方法都满足匹配,交给处理函数进行处理
  7. app.get('/getHeader/:id', (req, resp) => {
  8. // rep和req是被express封装后的对象
  9. // 请求信息
  10. console.log('请求头', req.headers);
  11. console.log('请求路径', req.path);
  12. console.log('请求参数', req.query);
  13. console.log('请求动态参数', req.params)
  14. })
  15. app.listen(12306, () => {
  16. console.log('server on 12306 has start')
  17. })
  1. 设置状态码和重定向 ```javascript const express = require(‘express’); const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数

// 配置一个请求应映射,如果路径和方法都满足匹配,交给处理函数进行处理 app.get(‘/getHeader/:id’, (req, resp) => { // rep和req是被express封装后的对象

  1. // 设置状态码
  2. resp.status(302).header('location', 'https://www.baidu.com').end(); // 不使用send返送消息,需要手动end(),防止客户端一直等待响应信息

// 简写 resp.status(302).location(“https://www.baidu.com").end(); // 最简简单单 resp.redirect(‘https://www.baidu.com‘, 302);// 设置重定向状态码,默认是是301 过时了 resp.redirect(302,’https://www.baidu.com');// 设置重定向状态码,默认是是301 新方法

}) app.listen(12306, () => { console.log(‘server on 12306 has start’) })

  1. > 不使用send返送消息,需要手动end()结束响应,防止客户端一直等待响应信息
  2. 4. 设置请求头
  3. ```javascript
  4. const express = require('express');
  5. const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
  6. // 配置一个请求应映射,如果路径和方法都满足匹配,交给处理函数进行处理
  7. app.get('/getHeader/:id', (req, resp) => {
  8. // rep和req是被express封装后的对象
  9. //设置header后,发送信息
  10. resp.setHeader('data-sources', 'recuit');
  11. resp.send([1, 2, 3]);
  12. })
  13. app.listen(12306, () => {
  14. console.log('server on 12306 has start')
  15. })
  1. rest 风格的api接口 ```javascript const express = require(‘express’); const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数

// 配置一个请求应映射,如果路径和方法都满足匹配,交给处理函数进行处理 app.get(‘/student’,(req,res)=>{}) // 获取学生 app.put(‘/student/:id’,(req,res)=>{}) // 修改学生; app.delete(‘/student/:id’,(req,res)=>{}) // 删除学生; app.post(‘/student’,(req,res)=>{})// 提交学生 app.get(‘*’,(req,res)=>{})// 匹配所有的的get请求接口 app.listen(12306, () => { console.log(‘server on 12306 has start’) }) ```