手机版

在nodejs中实现路由功能

时间:2021-10-15 来源:互联网 编辑:宝哥软件园 浏览:

刚学Node的时候,发现了一个和之前观点完全不一样的场景。——你眼中的JavaScript是为了什么?特效?还是仅仅与客户互动?可以说JavaScript最早是在浏览器中运行的,但是如果你这样想,浏览器只给你提供了一个上下文,它定义了你可以用JavaScript做什么。在这里,您可以想到一个类似的企业,它定义了您可以在这里做什么,但没有说明JavaScript语言本身可以做什么。事实上,作为一种完整的语言,JavaScript可以在不同的上下文中使用,表现出不同的能力。这里提到的Nodejs实际上是一个上下文,一个运行环境,它允许JavaScript代码在后端运行(远离浏览器环境)。

路由是路由的核心。顾名思义,路由就是我们要用不同的方式处理不同的URL,比如/start的业务逻辑和/upload模块的业务。逻辑上是不一致的。在现实的实现下,路由过程会在路由模块中“结束”,而路由模块并不是真正对请求采取行动的模块,否则,当我们的应用程序变得更加复杂时,就无法很好地扩展。

这里我们首先创建一个名为requestHandlers的模块,并为每个请求处理程序添加一个占位符函数:

复制代码如下:函数start () {console.log('请求处理程序' start '被调用。);函数睡眠(毫秒){ var startTime=new Date()。getTime();while(新日期()。getTime()startTime(毫秒);}睡眠(10000);返回“你好,开始”;}函数upload(){ console.log('已调用请求处理程序' upload '));返回“你好上传”;} exports.start=startexports.upload=上传;

这样我们就可以把请求处理程序和路由模块连接起来,让路由“有路可走”。之后,我们决定通过一个对象传递一系列请求处理程序,并且需要以松散耦合的方式将这个对象注入到router()函数中。主文件index.js:

复制代码如下: var server=require('。/server’);var router=require('。/router’);var requestHandlers=require('。/RequestHandlers’);var句柄={ };handle['/']=RequestHandlers . start;handle['/start ']=RequestHandlers . start;handle['/upload ']=RequestHandlers . upload;server.start(router.route,handle);

如上图所示,很容易将不同的URL映射到同一个请求处理程序:只需给对象添加一个带有“/”键的属性,对应requestHandlers.start,这样我们就可以简单地配置/start和/requests由start处理程序处理。对象定义完成后,我们将其作为附加参数传递给服务器,参见server.js:复制代码如下: var http=require(' http ');var URL=require(' URL ');函数start(route,handle){ function on request(request,response){ var pathname=URL . parse(request . URL)。路径名;控制台.日志('收到对' pathname '的请求');路由(句柄、路径名);response.writeHead(200,{ ' Content-Type ' : ' text/plain ' });var内容=路由(句柄、路径名);response.write(内容);response . end();} http.createServer(onRequest)。听(8888);控制台.日志('服务器已启动');} exports.start=start

这样,handle参数被添加到start()函数中,handle对象作为第一个参数被传递给route()回调函数。下面定义了route.js:

复制代码如下:函数route(句柄,路径名){console.log('即将为' pathname '路由请求);if(句柄[pathname]==='function'){返回句柄[pathname]();} else { console . log(' pathname '找不到请求处理程序);返回“404未找到”;} } exports.route=route

通过上面的代码,我们首先检查给定路径对应的请求处理程序是否存在,如果存在,直接调用对应的函数。我们可以像从关联数组中获取元素一样,从传递的对象中获取请求处理函数,即handle[pathname]();这个表达给人的感觉就像在说:“嗨,请帮我走这条路。”该程序的运行效果如下:

版权声明:在nodejs中实现路由功能是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。