http
const http = require('http');
http.createServer((res, req) => {
// 处理不同请求,需要写大量的判断
})
- 根据不同的请求路径,请求的方法,做不同的事情,处理起来比较麻烦
- 读取请求体和写入响应体是通过流的方式处理的,比较麻烦
使用第三方库
- express 生态完整
- koa2 api更加先进
官网:https://www.expressjs.com.cn/4x/api.html
使用
第一种方式
const http = require('http');
const express = require('express');
const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
const server = http.createServer(app);
server.listen(12306, () => {
console.log('server on 12306 has start')
})
第二种方式
const express = require('express');
const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
app.listen(12306, () => {
console.log('server on 12306 has start')
})
REST风格的Api接口
/api/student post 添加学生
/api/student/id get 获取学生
/api/student/:id put 修改学生
/api/student/:id delete 删除学生
同一个接口,根据不同的请求方式,来出来不同类型的操作,例如
app.get('/student') // 获取学生
app.put('/student/:id') // 修改学生;
app.delete('/student/:id') // 删除学生;
app.post('/student')// 提交学生
创建一个api
const express = require('express');
const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
// 配置一个请求应映射,如果路径和方法都满足匹配,交给处理函数进行处理
app.get('/getHeader/:id', (req, resp) => {
// rep和req是被express封装后的对象
// 请求信息
console.log('请求头', req.headers);
console.log('请求路径', req.path);
console.log('请求参数', req.query);
console.log('请求动态参数', req.params)
// 相应信息, 请求头里面的Content-Type会根据传入的值,自动的添加上,不需要想http一样自己写判断
// resp.send('<h1>你好</h1>') // 字符串
// resp.send([1, 2, 3]); // 数组
// resp.send({ name: '蓝瞳', age: 18 }) // 对象
// 设置header后,发送信息
// resp.setHeader('data-sources', 'recuit');
// resp.send([1, 2, 3]);
// 设置状态码
// 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 新方法
})
// 请求是 rest风格
// app.get('/student') // 获取学生
// app.put('/student/:id') // 修改学生;
// app.delete('/student/:id') // 删除学生;
// app.post('/student')// 提交学生
// app.get('*')// 匹配所有的的get请求接口
app.listen(12306, () => {
console.log('server on 12306 has start')
})
- 设置响应信息 ```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’) })
> 相应信息, 请求头里面的Content-Type会根据传入的值,自动的添加上,不需要想http一样自己写判断
2. 获取请求头信息
```javascript
const express = require('express');
const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
// 配置一个请求应映射,如果路径和方法都满足匹配,交给处理函数进行处理
app.get('/getHeader/:id', (req, resp) => {
// rep和req是被express封装后的对象
// 请求信息
console.log('请求头', req.headers);
console.log('请求路径', req.path);
console.log('请求参数', req.query);
console.log('请求动态参数', req.params)
})
app.listen(12306, () => {
console.log('server on 12306 has start')
})
- 设置状态码和重定向 ```javascript const express = require(‘express’); const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
// 配置一个请求应映射,如果路径和方法都满足匹配,交给处理函数进行处理 app.get(‘/getHeader/:id’, (req, resp) => { // rep和req是被express封装后的对象
// 设置状态码
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’) })
> 不使用send返送消息,需要手动end()结束响应,防止客户端一直等待响应信息
4. 设置请求头
```javascript
const express = require('express');
const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
// 配置一个请求应映射,如果路径和方法都满足匹配,交给处理函数进行处理
app.get('/getHeader/:id', (req, resp) => {
// rep和req是被express封装后的对象
//设置header后,发送信息
resp.setHeader('data-sources', 'recuit');
resp.send([1, 2, 3]);
})
app.listen(12306, () => {
console.log('server on 12306 has start')
})
- 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’) }) ```