nodejs搭建静态资源服务器(express插件)

829 阅读5分钟

express基本使用

Express框架介绍

1.Express是NodeJS开发中一个非常重量级的第三方框架,它对于NodeJS服务端就相当于Jquery对于HTML客户端。

2.Express官网:

  [www.expressjs.com.cn/](https://link.juejin.cn?target=http%3A%2F%2Fwww.expressjs.com.cn%2F "http://www.expressjs.com.cn/")

   [expressjs.com/](https://link.juejin.cn?target=http%3A%2F%2Fexpressjs.com%2F "http://expressjs.com/")

       一般我们学习一个新的技术,都是去官网文档查看它的API,然后多多尝试,熟能生巧

3.Express的github地址:github.com/expressjs/e…

   Express的原作者TJ在node社区非常的有名,他写过200多个框架,目前他已经将Express交给了朋友维护,宣布不再维护NodeJS框架,转向Go语言[github.com/tj](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Ftj "https://github.com/tj")

4.Express官网是这样介绍自己的:基于 Node.js 平台,快速、开放、极简的 web 开发框架。

  *Express一个非常重要的亮点就是它没有改变nodejs已有的特性,而是在它的基础上进行了拓展*

      **也就是说,使用Express你既可以使用nodejs原生的任何API,也能使用Express的API**

5.Express三大核心功能

   1.托管静态资源

    -   第二天讲的nodejs实现静态服务器功能在express中只需要一行代码

  2.路由

      express自带路由功能,让Node服务端开发变得极其简单
      express支持链式语法,可以让代码看起来更加简洁

  ==3.中间件==

      Express最为核心的技术和思想,万物皆中间件

          中间件虽然理解起来有点困难,但是使用起来非常方便,类似于`bootstrap插件`.

下载express命令: npm i express

  如果你的网速很慢,可以在你的任意终端执行命令来提速:`npm config set registry https://registry.npm.taobao.org/`

## 第三方中间件使用

  1.在Express官网,有非常多得第三方中间件,它们可以让我们的Nodejs开发变得极其简单
  `中间件前端的插件,使用后就会给express中的req或者res添加成员`

2.所有的第三方框架学习套路都是一样的

   1.进官网,查文档
   2.CTRL+C 与 CTRL+V

3.第三方中间件使用步骤一般都是固定两步

   : 安装 `npm i xxxx`(官网复制粘贴)

      **第三方中间件都需要使用npm安装,可以理解为是一种特殊的第三方模块**

   二: 使用 `app.use(xxx)`(官网复制粘贴)

body-parse第三方中间件:解析post请求参数

   安装body-parser : `npm install body-parser`
  [www.npmjs.com/package/bod…](https://link.juejin.cn?target=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Fbody-parser "https://www.npmjs.com/package/body-parser")

1.html中所有外部资源路径都会变成网络请求

```
 服务器需要根据请求路径响应返回对应的文件
复制代码
```

2.静态资源(图片、文件、音视频)一般使用路径拼接的方式来处理

```
 服务端可以直接拼接url来响应对应资源,简化代码
复制代码
```

//1.导入模块
const express = require('express')

//2.创建服务器
const app = express()

//3.路由
/*  后台的路由 其实就是 前端的接口文档
路由 : 一个请求,对应一个处理函数
接口文档 : 后台人员会根据路由整理出一份使用说明文档,也就是前端的接口文档
*/
app.get('/',(req,res)=>{
    res.end('index')
})

app.get('/login',(req,res)=>{
    
})

//4.开启服务器
app.listen(3000,()=>{
    console.log('开启服务器成功')
})
复制代码

express响应客户端数据

//1.导入模块
const express = require('express')

//2.创建服务器
const app = express()

//3.路由
/* express响应数据
res.send( 字符串 | js对象 )
res.sendFile( 文件路径 )
*/
//(1)响应中文
app.get('/',(req,res)=>{
    //nodejs原生的响应方法: res.end()  只能响应二进制和字符串, 中文还会乱码
    // res.end('index')

    //express的响应方法: res.send()  会自动设置响应头识别中文
    res.send('我是首页')
})

//(2)响应json
app.get('/abc',(req,res)=>{
    //当res.send()方法里面是对象的时候, express会自动帮你将对象转成JSON字符串
    res.send({name:'张三',age:20})

    //上面代码等价于
    // res.setHeader('Content-type','text/plain;charset=utf8')
    // res.end( JSON.stringify({name:'张三',age:20}) )
})

//(3)响应文件
app.get('/login',(req,res)=>{
    //express : 只需要写文件路径, 底层会自动用fs模块帮你读取返回
    res.sendFile(`${__dirname}/login.html`)

    //原生nodejs : fs模块读取文件数据,响应返回
})

//4.开启服务器
app.listen(3000,()=>{
    console.log('开启服务器成功')
})

复制代码

express托管静态资源

//1.导入express
const express = require('express')

//2.创建服务器
const app = express()

//3.托管静态资源
/* 
(1)如果请求路径是/ : express会自动读取www里面的index.html响应返回
(2)  如果请求路径是www里面的文件夹路径 : express会自动从www开始拼接文件路径响应返回
*/
app.use(express.static('www'))

//4.写路由(接口文档)

//5.开启服务器
app.listen(3000,()=>{
    console.log('服务器开启成功')
})
复制代码

express中间件使用

//1.导入模块
const express = require('express')

//2.创建服务器
const app = express()

//3.托管静态资源
app.use(express.static('www'))

//4.写路由 : 前端接口文档

/* 导入中间件 */
//(1)导入模块
const bodyParser = require('body-parser')
//(2)使用模块
// parse application/x-www-form-urlencoded
//解析querystring格式参数:   'key=value&key=value'
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
//解析json格式参数 :  '{"key":"value"}'
app.use(bodyParser.json())


//4.1 get请求
app.get('/abc',(req,res)=>{
    //(1)请求:req
    console.log(req.url)
    console.log(req.query)//get参数
    /* 
    a.get请求参数会在url后面拼接,服务器一般通过切割字符串方式来获取get参数
    b.express框架自动帮我们切割url中的get参数, 放入 req.query中
    */
    //(2)处理
    //(3)响应
    res.send({
        status:200,
        msg:'请求成功',
        data:[]
    })
})

app.post('/add',(req,res)=>{
    //(1)请求:req
    console.log(req.url)
    console.log(req.body)//请求体 post参数
    
    //(2)处理
    //(3)响应
    res.send({
        status:200,
        msg:'post请求成功',
        data:[]
    })
})

//5.开启服务器
app.listen(3000,()=>{
    console.log('服务器启动成功')
})


作者:瓜皮小郑
链接:juejin.cn/post/710005… 来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。