设置content-type
设置content-type作用?
- 在http协议中,content-type用来告诉对方本次传输的数据类型是什么
- 在请求头中设置content-type来告诉服务器,本次携带的数据是什么类型
- 在响应头中设置content-type来告诉服务器,本次返回的数据是什么类型的
通过使用res对象中的setHeader方法,我们可以设置content-type这个响应头。这个响应头的作用是告诉浏览器,本次响应的内容是什么格式的内容,以方便浏览器进行处理。
常见的几种文件类型 和content-type
- .html:
res.setHeader('content-type', 'text/html;charset=utf8') - .css:
res.setHeader('content-type', 'text/css;charset=utf8') - .js:
res.setHeader('content-type', 'application/javascript') - .png:
res.setHeader('content-type', 'image/png') - json数据:
res.setHeader('content-type', 'application/json;charset=utf-8')
其他类型参考这里:其它类型,参考这里:developer.mozilla.org/en-US/docs/…
示例
const fs = require('fs')
const path = require('path')
const server = http.createServer((req, res) => {
// 省略其他
if(url === '/' || url === '/index.html') {
// 读出文件内容并返回
// 省略其他
res.setHeader('content-type', 'text/html;charset=utf8');
res.end(content)
}
}
server.listen(8000, ()=>{
console.log('服务器已经在8000启动');
})
设置statusCode(响应状态码)
就是http的状态码。 设置格式 res.statusCode = 值
常见的响应状态码请参考网址:www.runoob.com/http/http-s…
Express基本介绍
Express 是一个基于 Node.js 平台,快速、开放、极简的 web 开发框架。
运用Express快速创建一个web服务器
const express = require('express')
// 1. 调用 express() 得到一个 app
// 类似于 http.createServer()
const app = express()
// 2. 设置请求对应的处理函数
// 当客户端以 GET 方法请求 / 的时候就会调用第二个参数:请求处理函数
app.get('/', (req, res) => {
res.send('hello world')
})
// 3. 监听端口号,启动 Web 服务
app.listen(3000, () => console.log('app listening on port 3000!'))
说明:
- app.get('/')相当于添加事件监听:当用户以get方式求"/"时,它后面的回调函数会执行,其回调函数中的req,res与前面所学http模块保持一致。
- res.send()是exprss框架给res对象补充提供的方法(http模块中的res是没有这个方法的),用于结束本次请求。类似的还有res.json(), res.sendFile() 。
- express 框架会增强req,res的功能
托管静态资源-web服务器
// 2. 设置请求对应的处理函数--app.use(express.static('public'))
路由和接口
路由(Routing)是由一个 URL(或者叫路径标识)和一个特定的 HTTP 方法(GET、POST 等)组成的,涉及到应用如何处理响应客户端请求。每一个路由都可以有一个或者多个处理器函数,当匹配到路由时,这些个函数将被执行。
1.接口传参
我们使用ajax请求向服务器接口传参,按照http协议的约定。每个请求分为三个部分
-
请求行: 保存了请求方式,地址,可以查询字符串的格式附加一部分数据。
-
请求头:它可以附加很多信息,其中kcontent-type用来约定请求体中保存的数据格式。 content-type常见的三种取值: content-type的值 | 表示请求体的数据格式 | 示例 | | -------------------------------- | ---------- | ------------- | | application/x-www-form-urlencode | 普通键值对象 | a=2&c=1 | | application/json | json对象 | {a:1,b:{c:1}} | | multipart/form-data | 上传文件 | file
-
请求体:本次请求携带的参数,至于这些参数到了后端应该如何解析出来,由请求头中的content-type来决定
下面带大家看一下 Express简单实现几种常见接口
app.use(express.static('public'))
// 引入bodyParse包
const bodyParser = require('body-parser')
// 使用包. 则在后续的post请求中
// 会自动加入req.body属性,这个属性中就包含了post请求所传入的参数
// 处理普通的键值对格式
// Content-Type: application/x-www-form-urlencoded
app.use(express.urlencoded())
// 处理JSON格式
// Content-Type: application/json;
app.use(express.json())
// 引入multer包
const multer = require('multer');
// 配置一下multer
// 如果本次post请求涉及文件上传,则上传到uploads这个文件夹下
// Content-Type: multipart/form-data;
var upload = multer({ dest: 'uploads/'})
// 实现接口1: get类型接口
// 返回所传入的参数,并附上上时间戳
app.get('/getapi',(req,res)=>{
// 通过 req.query快速获取传入的参数
console.log(req.query);
let obj = req.query
obj._t = Date.now();
res.json( obj )
})
// 实现接口2:普通post 键值对
app.post('/post',(req,res)=>{
// 希望在后端收到post传参
console.log(req.body);
let obj = req.body
obj._t = Date.now();
res.json(obj)
})
// 实现接口3:用来JSON格式的数据
// Content-Type: application/json;
app.post('/postJSON',(req,res)=>{
// 希望在后端收到post传参
console.log(req.body);
// res.send('/postJSON')
res.json( req.body )
})
// 实现接口4:接口formDate
app.post('/publish',upload.single('cover'),(req,res)=>{
console.log('publish...')
//upload.single('cover')
// 这里的cover就是在页面中表单元素中的name
// <input type="file" name="cover" />
// 把要上传文件放在指定的目录
console.log(req.file);
// 其它参数,还是在req.body中找
console.log(req.body);
res.json({code:200,msg:'上传成功',info:req.file.path})
})
app.listen(3000,()=>{
console.log('express应用在3000端口启动了');
})
RESTful接口
RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。
接口名:localhost:8080/articles
类型:get
功能:获取文章信息
接口名:localhost:8080/articles
类型:post
功能:添加新文章
接口名:localhost:8080/articles
类型:delete
功能:删除文章
接口名:localhost:8080/articles
类型:put
功能:编辑文章
RESTful设计是:
- 通过URL设计资源。接口名一般都是名词,不包含动词。
- 请求方式(get,post,delete,put)决定资源的操作类型