# fc-route **Repository Path**: lovefc/fc-route ## Basic Information - **Project Name**: fc-route - **Description**: 通用node路由匹配器 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-02-14 - **Last Updated**: 2023-10-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: Router, Node, Nodejs ## README

fc-route

Coverage Status Coverage Status

一个轻便高效的node路由

支持原生node的http,https,http2模块,支持koa框架,经过高并发测试,性能优越,精确匹配,使用方便

## ### 安装npm包 ``` npm install fc-route ``` ## 使用方法 ### http: ``` const http = require('http'); let server = http.createServer(); const _router = require('fc-route'); let router = new _router(); router.get('/',function (req, res) { res.end('hello world'); }); router.http(server); server.listen(3000, function () { console.log('服务器3000启动成功,可以访问了。。。') }) ``` ### https: ``` const https = require('https'); const fs = require('fs'); const server = https.Server({ key: fs.readFileSync(__dirname+'/server.key'), cert: fs.readFileSync(__dirname+'/server.crt'), }); const _router = require('fc-route'); let router = new _router(); router.get('/',function (req, res) { res.end('hello world'); }); router.http(server); server.listen(3001, function () { console.log('服务器3001启动成功,可以访问了。。。') }) ``` ### http2: ``` const http2 = require('http2'); const fs = require('fs'); const server = http2.createSecureServer({ key: fs.readFileSync(__dirname+'/server.key'), cert: fs.readFileSync(__dirname+'/server.crt'), }); const _router = require('fc-route'); let router = new _router(); router.get('/',function (req, res) { res.end('hello world'); }); router.http(server); server.listen(3002, function () { console.log('服务器3002启动成功,可以访问了。。。') }) ``` ### koa: ``` const Koa = require('koa'); const app = new Koa(); const _router = require('fc-route'); let router = new _router(); router.get('/', function (ctx, next) { ctx.body = 'hello world'; }); router.koa(app); server.listen(3004, function () { console.log('服务器3004启动成功,可以访问了。。。') }) ``` >更多使用demo请看这里 >>> [戳这里](https://github.com/lovefc/fc-route-demo) ## 路由方法 | 方法 | 说明 | | --- | --- | | get | router.get('/',function (req, res){}) | | post | router.post('/',function (req, res){}) | | head | router.head('/',function (req, res){}) | | options | router.options('/',function (req, res){}) | | put | router.put('/',function (req, res){}) | | patch | router.patch('/',function (req, res){}) | | delecte | router.delecte('/',function (req, res){}) | | all | router.all('/',function (req, res){}) | > all方法匹配所有,请谨慎使用 > 为了安全考虑,一些特殊的http方法并没有做适配 ## 路由匹配符 | 匹配符号 | 作用 | 代码 | | --- | --- | --- | | % | 匹配数字 | router.get('/%value',function (req, res){}) | | @ | 匹配大小写 | router.get('/@value',function (req, res){}) | | : | 匹配大小写数字 | router.get('/:value',function (req, res){}) | | ! | 匹配中文 | router.get('/!value',function (req, res){}) | | ~ | 匹配以上全部 | router.get('/~value',function (req, res){}) | > ~匹配所有字符串,此项能匹配以上的所有路由,请放在第二匹配上,第一匹配请不要用,请慎重选择 ## 匹配取参数 ``` router.get('/%sz/@zm', function (req, res) { let { sz, zm } = req.params; res.end('数字:'+sz+',字母:'+zm); }); ``` ## 全局设置 ``` router.get(function (req, res) { res.write('所有的get方法,这里都会输出'); }); ``` ## 设置路由前缀 ``` router.prefix('/app') ``` ## 精确匹配原则 >当你设置两行规则的时候,会优先匹配最精准的路由 ``` router.get('/%sz/@zm', function (req, res) { let { sz, zm } = req.params; res.end('数字:'+sz+',字母:'+zm); }); router.get('/6/@zm', function (req, res) { let { zm } = req.params; res.end('字母:'+zm); }); ``` > 按照一般的路由匹配,上面那个匹配肯定会覆盖下面的,实际上则不然,当你第二个参数为6的时候,只会匹配第二个 > 这个精确匹配功能koa的路由并不具备,无需担心效率,内部有缓存机制 ## 更新记录 ### 2023/10/06 0.0.5 => 现在不用担心使用原生http,处理逻辑写错了会中断了进程,另外新加了`res.json`来帮你快速输出json格式 ``` router.get('/',function (req, res) { res.json({'code':200,'msg':'sucess'}); }); ``` ## License [MIT](https://opensource.org/licenses/MIT) Copyright (c) 2022-[lovefc](http://lovefc.cn)