Express框架

              对于node.js来说,Express 是一个第三方模块,有丰富的 API 支持强大而灵活的中间件特性,Express 不对 Node.js 已有的特性进行二次抽象,只是在它之上扩展了 Web 应用所需的基本功能

        我们前面用http模块来支持web服务,写接口 ----- 原生js

        现在要用express来写web服务,写接口 ------ jQuery

Express搭建简单接口

        要创建本地项目 在下载 express插件npm i express (注意:目目录名字不要取中文,也不要取express)

搭建普通接口  

// 0. 导入 Express
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() 。

托管静态资源

让用户直接访问静态资源是一个web服务器最基本的功能 使用 app.use(express.static('文件名'))  使用这个可以实现资源额静态托管  他可以设置前缀 app.use('/public', express.static('public'))  这意味着想要访问public下的内容,必须要在请求url中加上/public

接口与路由

路由(Routing)是一组映射关系。它约定了当一个特定的 HTTP 方法(GET、POST 等)访问某个 URL(或者叫路径标识)时,服务器如何响应      app.请求方式('路径', 处理的回调函数)   例如:app.get('/',function=>{})   写接口就是一种特殊的路由

const express = require('express');
const app = express();
// 路由
app.get('/get', function(req, res) {
  // 处理逻辑  res.json是e    xpress提供的方法 发送一个json的响应
  res.json({ name: 'abc' });
});
// 开启这个服务器
app.listen('8088', () => {
  console.log('8088');
});

res.json() 发送一个json的相应  与res.end  有异曲同工之妙

req.query 属性 :是express框架会自动收集get方式从url地址中传递的查询字符串参数,并自动保存在req对象的query属性中。我们直接来获取即可。

小试牛刀

// 引入express
const express = require('express')
// 创建实例
const app = express()
// 配置请求方式 和 URL地址
app.get('/api/getlist', function(req, res) {
    // 返回数据 res.json()
// 将静态数据保存到 常量中
    const books = [{
            id: 1, //图书id
            bookname: "西游记", //书名
            author: "吴承恩", //作者
            publisher: "北京出版社", //出版社
        }
    ];
    // 开始判断 URL中是否带有id 如果带了 就去寻找准确的值  如果没带 则就将全部的都返回出去
    if (req.query.id !== undefined) {
       
        const book = books.find(item => item.id == req.query.id);   // find篇文章讲解
            // find在数组中找满足条件的第一个元素,找到就返回元素 找补到就返回 null
        if (book) {   // 如果不为空 就将这个返回出去
            res.json({
                "status": 0, //0标识成功
                "message": "获取图书列表数据成功", //描述信息
                "data": book // 成功后的 查询结果 
            })
        } else {   // 没找到就会显示失败
            res.json({
                "status": 1, // 其他失败
                "message": "找不到这本书", //描述信息
            })
        }
    } else {  // 没有准确的 id 将其所有返回出去
        const data = {
            "status": 0, //0标识成功,其他失败
            "message": "获取图书列表数据成功", //描述信息
            "data": books //返回数据
        }
        res.json(data)
    }
})
// 开启服务器 
app.listen(8080, () => {
    console.log("已启动");
});

写接口-post接口

app.post('地址',(req,res)=>{回调函数})

        1.get一般用来做查询 post用来做添加  2.传参不同:get的参数只能在请求行中通过查询字符串来传递, post一般是通过请求体(它也可以通过请求行来传递)来传递的。 Delete来做删除  put做编辑

        2.post根据传递的参数的格式不同,分成三种情况来说   传递普通键值对    传递json

 传递form表单(涉及文件上传)

1.传递普通键值对:    用app.use(express.urlencoded())来获取请求体的参数。 然后参数 会自动放在 req.body里面  express.urlencoded()是中间键是为了增强express的功能把传来的数据放在 req.body内

2.传递json:使用app.use(express.json()) 来获取请求体中的数据

3.传递form-Data表单(涉及文件上传):Multer 是一个node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件  涉及文件上传操作,则需要在服务器端额外使用第三方multer这个包(不属于express)来获取上传的信息   

安装包  npm install multer    引入包 :  const multer = require('multer');

const upload = multer({dest:'uploads/'})  上传的文件会保存在这个目录下 uploads表示一个目录名,你也可以设置成其它的

 3. 使用
这个路由使用第二个参数 .upload.single表示单文件上传, 'cover' 表示要上传的文件在本次上次数据中的键名。对应于前端页面上的:<input type="file" name='cover'/>

app.post("/postfile", upload.single('cover'), function(req,res){req.file 记录了文件上传的信息 req.body 记录了其它普通参数(非文件)的信息 其它操作})

如果当前目录下没有uploads,它会自动创建uploads这个文件夹       upload.single只是处理了文件的上传。你仍可以通过req.body来获取其它参数

理解接口传参

 请求报文:行,头,体

我们一般使用ajax技术请求接口,按http协议的约定,每个请求都有三个部分:

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

请求头:它可以附加很多信息,其中content-type用来约定请求体中保存的数据格式。content-type常见有三种取值:

content-type的值content-type的值示例
application/x-www-form-urlencode普通键值对象a=2&c=1
application/jsonjson对象{a:1,b:{c:1}}
multipart/form-data上传文件file

 请求体:  本次请求携带的参数。至于这些参数到了后端应该如何解析出来,由请求头中的content-type来决定。

总结

传参方式前端 content-type后端框架express
请求行get方式req.query
请求体application/x-www-form-urlencodeapp.use(express.urlencoded()); req.body
请求体application/jsonapp.use(express.json()); req.body
请求体multipart/form-data1. 引入包 const multer = require('multer'); 2. 配置app.post('/apiname', upload.single(), req.body)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值