当前端精通node.js

475 阅读4分钟

R-C (1).jpg

设置content-type

设置content-type作用?

  1. 在http协议中,content-type用来告诉对方本次传输的数据类型是什么
  2. 在请求头中设置content-type来告诉服务器,本次携带的数据是什么类型
  3. 在响应头中设置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协议的约定。每个请求分为三个部分

  1. 请求行: 保存了请求方式,地址,可以查询字符串的格式附加一部分数据。

  2. 请求头:它可以附加很多信息,其中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

  3. 请求体:本次请求携带的参数,至于这些参数到了后端应该如何解析出来,由请求头中的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)决定资源的操作类型

R-C.jpg