当前位置: 首页 > news >正文

nodejs--fastify-url构建以及路由前缀和新增用户

Fastify 同时支持静态与动态的 URL,要注册一个参数命名的路径,请在参数名前加上冒号星号表示*通配符**。 *注意,静态路由总是在参数路由和通配符之前进行匹配。

一、静态路由+查询参数的方式

1.首先我们定义一个新的路由,并在其中写入数据(例如此代码中的users数据)(本实例中数据是虚拟的位置和人物)

'use strict'

const users=[
    {
        id:1,
        name:'过儿',
        age:18,
        adress:'哈尔滨市古墓'
    },  
    {
        id:2,
        name:'龙儿',
        age:25,
        adress:'哈尔滨市古墓'
    },
    {
        id:3,
        name:'蓉儿',
        age:38,
        adress:'哈尔滨市桃花岛'
    },
    {
        id:4,
        name:'靖哥',
        age:39,
        adress:'哈尔滨市桃花岛'
    },
]
module.exports = async function (fastify, opts) {
// fastify.route(
//     {
//         method:'GET',
//         url:'/api',
//         handler:async (request,reply)=>{

//             return {code:200,msg:'成功获取数据'}
//         }
//     }
// );
fastify.get('/api/datas',async (request,reply)=>{
 

    return 'ok';
})
}  

2.定义之后在airpost中检查是否返回ok,一切正常之后,设置query参数并赋值。(我们后边就通过这个query即查询参数的值进行获取对应的数据)

 3.通过request对象参数(request具体所有参数在Request | Fastify 中文网中查看)中的query属性进行获取当前query进行匹配(但是这个query的类型是对象,在其中有我们定义的查询参数(本实例为uid),但是uid类型是string,与我们users数据中的id进行匹配需要转换为数字),注意如果不匹配的时候,返回状态错误码1,并通过msg进行反馈获取失败

'use strict'

const user=[
    {
        id:1,
        name:'过儿',
        age:18,
        adress:'哈尔滨市古墓'
    },  
    {
        id:2,
        name:'龙儿',
        age:25,
        adress:'哈尔滨市古墓'
    },
    {
        id:3,
        name:'蓉儿',
        age:38,
        adress:'哈尔滨市桃花岛'
    },
    {
        id:4,
        name:'靖哥',
        age:39,
        adress:'哈尔滨市桃花岛'
    },
]
module.exports = async function (fastify, opts) {
// fastify.route(
//     {
//         method:'GET',
//         url:'/api',
//         handler:async (request,reply)=>{

//             return {code:200,msg:'成功获取数据'}
//         }
//     }
// );
fastify.get('/api/datas',async (request,reply)=>{
 let id=request.query.uid;
 id-=0;
 let Userdata=null;
 for(var i=0;i<user.length;i++){
  if(id === user[i].id){
  Userdata=user[i];
  break;
  }
 }
 console.log(Userdata);
 if( Userdata === null ){
return {
    code:1,
    msg:'请求失败',
};
 }
    return {
        code:200,
        msg:'请求成功',
        data:Userdata
    };
})
}  

4.通过查询参数进行获取数据

 二、动态路由+params

1.动态路由进行创建的时候,路径后边可以用分号获取后边的内容(params),以下边这个为例,其中的path为/api/datas/:uid,其中我们uid代表的是datas/后边的参数(params),通过request对象中的params取到。我们定义的uid,所以在params对象的uid中存储,同样是字符串,我们想用它与id进行匹配需要转换为数字。剩下的匹配方法和上边一致

'use strict'

const user=[
    {
        id:1,
        name:'过儿',
        age:18,
        adress:'哈尔滨市古墓'
    },  
    {
        id:2,
        name:'龙儿',
        age:25,
        adress:'哈尔滨市古墓'
    },
    {
        id:3,
        name:'蓉儿',
        age:38,
        adress:'哈尔滨市桃花岛'
    },
    {
        id:4,
        name:'靖哥',
        age:39,
        adress:'哈尔滨市桃花岛'
    },
]
module.exports = async function (fastify, opts) {

fastify.get('/api/datas/:uid',async (request,reply)=>{

    let uid=request.params.uid;
    uid-=0;
    let Userdata=null;
    for(var i=0;i<user.length;i++){
     if(uid === user[i].id){
     Userdata=user[i];
     break;
     }
    }
    console.log(Userdata);
    if( Userdata === null ){
   return {
       code:1,
       msg:'请求失败',
   };
    }
       return {
           code:200,
           msg:'请求成功',
           data:Userdata
       };

})

}  

2.查询 

三、通配符*

目前,我们可以通过通配符进行匹配我们没有定义的页面和方法获取到404 NOT FOUND。

'use strict'
module.exports=async ( fastify,opts)=>{

    fastify.all('*',()=>{
        return '404 NOT FOUND'})
}

 但是当我们匹配下边这个的时候,出现的结果是下边的,说明我们动态绑定的后边写什么都不会出现404,会执行我们定义路由时的方法。

http://localhost:3000/api/datas/12

四、路由前缀

有时你需要维护同一 API 的多个不同版本。一般的做法是在所有的路由之前加上版本号,例如 /v1/user。 Fastify 提供了一个快捷且智能的方法来解决上述问题,无需手动更改全部路由。这就是路由前缀

1.我们在app.js文件中下边这个代码段中为路由添加前缀'v1'。通过prefix:'/v1'进行添加。

  fastify.register(AutoLoad, {
    dir: path.join(__dirname, 'routes'),
    options: Object.assign({prefix:'/v1'}, opts)
  })
}

2.然后我们进行测验,测验的实例为上一个博客的实例,我们发现用原来的url地址访问不到数据了,我们加上前缀就可以访问到了

 

五、新增用户

request对象中body时消息主体,我们可以通过它来实现新用户数据的传入。

1.首先我们定义一个路由进行实现新增用户,再定一个路由获取user的全部数据用来查看我们是否添加了新用户数据。

'use strict'

const user=[
    {
        id:1,
        name:'过儿',
        age:18,
        adress:'哈尔滨市古墓'
    },  
    {
        id:2,
        name:'龙儿',
        age:25,
        adress:'哈尔滨市古墓'
    },
    {
        id:3,
        name:'蓉儿',
        age:38,
        adress:'哈尔滨市桃花岛'
    },
    {
        id:4,
        name:'靖哥',
        age:39,
        adress:'哈尔滨市桃花岛'
    },
]
module.exports = async function (fastify, opts) {

fastify.post('/api/datas/add',async (request,reply)=>{
let id=4;
try{
let useradd={id:++id,...request.body};
user.push(useradd);

return {
    code:200,
    msg:'请求成功'
}
}catch(error){
return {
 code:1,
 msg:'请求失败'
}
}
})
fastify.all('/api/datas/all',(request,reply)=>{
    return {
    code:200
    ,msg:"请求成功",
    data:user
    }
})
}  

2.然后我们在指定的url其中Body->raw->json文件进行输入我们新用户的相关信息。然后发送就会提示我们定义的code:200...

 3.然后我们进行查看是否已经添加(发现已经添加成功)

相关文章:

  • 关系型数据库RDS基本简介
  • 20分钟学会git基本操作,创建远程仓库
  • 游戏开发最佳10个工具与技术方案
  • [Spark、hadoop]Spark Streaming整合kafka实战
  • JavaSE——集合、集合继承结构图
  • HostMonitor监控软件
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • 接口查询优化:优雅的处理大批量数据及 in 超过 1000 问题
  • Linux搭建redis调试环境
  • 精确的数字-C++数据类型
  • C# 中的多线程和异步编程
  • 前端初识算法
  • SQL->基础->进阶
  • keepalived实现nginx负载均衡机高可用
  • 如何通过优化 Python 中的 GPU 使用率将视频处理速度提高 5 倍(教程含源码)
  • SegmentFault for Android 3.0 发布
  • [译]前端离线指南(上)
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • axios 和 cookie 的那些事
  • CentOS7简单部署NFS
  • Intervention/image 图片处理扩展包的安装和使用
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript 奇技淫巧
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Linux中的硬链接与软链接
  • nfs客户端进程变D,延伸linux的lock
  • spring cloud gateway 源码解析(4)跨域问题处理
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vue自定义指令实现v-tap插件
  • 从输入URL到页面加载发生了什么
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 深度学习在携程攻略社区的应用
  • 硬币翻转问题,区间操作
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 阿里云移动端播放器高级功能介绍
  • ​ubuntu下安装kvm虚拟机
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (k8s)kubernetes集群基于Containerd部署
  • (k8s中)docker netty OOM问题记录
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (理论篇)httpmoudle和httphandler一览
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (转)Linq学习笔记
  • (自用)gtest单元测试
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET Framework杂记
  • .NET gRPC 和RESTful简单对比
  • .Net Memory Profiler的使用举例
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth