node js- 路由转发和失败重试策略

      node js是一个轻量的,能够单线程异步处理的高效框架。它给我们 提供了很多优秀的功能,所以今天小编就带着大家认识它的路由转发和路由重试;

  ▶  路由转发

     其实很多时候,node js被使用的并不是它的服务端的JavaScript,而是路由转发的功能;就像nginx会时常被作为静态资源服务器来使用;所以今天小编就带着大家一起来看看它的路由转发:

    路由指的就是我们要针对不同的URL有不同的处理方式,例如处理/start的业务逻辑和处理/upload模块 的业务;逻辑就是不一致的。在现实的实现下,路由过程会在路由模块中“结束”,并且路由模块并不是真正者针对请求“采取行动”的模块,否则当我们的应用程序变得更为复杂的时候就将无法得到很好的扩展。

    我们需要在app.js(node js 的启动文件)中增加了多个路由转发的配置,代码如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">	//增加路由请求转发配置 
	app.use(’/’,routes); 
	app.use(’/login’, routes); 
	app.use(’/logout’, routes); 
	app.use(’/dsg’,routes); 
        app.use(’/userManage’,userManage); </span>
       其中userManage的代码如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">	/**
	用户管理路由配置
	@type {*|exports} */ 
	var express = require(‘express’); 
	var router = express.Router(); 
	var request = require(‘request’); 
	router.post(’/userManage’,function(req,res){ console.log(‘remote server!’); res.sendFile(path.join(__dirname,"…/views",‘login.html’)); });
	module.exports = router; 
</span>
      这样,我们就可以在页面中发起对该页面的请求:

<span style="font-family:KaiTi_GB2312;font-size:18px;">Ext.Ajax.request({ url: ‘/userManage’, method : ‘post’, params: { username: username, password: password }</span>
     就我个人的理解而言,它的路由转发功能是在降低耦合思想上的一种提升:更像是一种安全屏障,单从js代码看,我们无法看到node js之后的文件和具体的实现,前端开发只需要根据接口文档获取传递过来的相关值进行使用。所以在一定程度上又增加了系统的安全性;

▶   失败重试策略

     同是开发的朋友,一定遇到过这种问题:调用某个接口的数据,有时候可能会因为某些原因在第一次没有加载出来,但是如果再次刷新数据便可以获取,所以为了在一定程度上为我们提供便利,node js 提供了失败重试的策略;

    首先我们需要使用 node js命令安装retry的包:npm install retry ;

    然后我们可以通过下面的程序来尝试连接失败的时候自动重试N次(N的值我们可以手动设置,如果不设置则默认为10):

<span style="font-family:KaiTi_GB2312;font-size:18px;">var retry = require('retry')
    , http = require('http');

function get(url, cb) {
    var options = {
        hostname: url,
        port: 80,
        method: 'GET'
    };

    var req = http.request(options, function (res) {
        console.log('STATUS: ' + res.statusCode);
        console.log('HEADERS: ' + JSON.stringify(res.headers));
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
//            console.log('BODY: ' + chunk);
        });
    });

    req.on('error', function (e) {
        console.log('problem with request: ' + e.message);
        cb(e.message);
    });

    req.end();

}

function retryGet(url, cb) {
    var operation = retry.operation();
    operation.attempt(function (currentAttempt) {
        console.log("Connect Times:" + currentAttempt + ":" + url);
        get(url, function (err) {
            if (operation.retry(err)) {
                return;
            }
            cb(err ? operation.mainError() : null);
        });
    });
}
var baidu = "www.baidu.com";
retryGet(baidu);

var facebook = "www.facebook.com";
retryGet(facebook);</span>
     最简单的方式就是把我们当前的网络断开,运行该app.js程序,会发现窗口中打印了自动重连的信息:

<span style="font-family:KaiTi_GB2312;font-size:18px;">problem with request: connect ETIMEDOUT
Connect Times:2:www.facebook.com
problem with request: connect ETIMEDOUT
Connect Times:3:www.facebook.com
problem with request: connect ETIMEDOUT
Connect Times:4:www.facebook.com
problem with request: connect ETIMEDOUT
Connect Times:5:www.facebook.com
problem with request: connect ETIMEDOUT
Connect Times:6:www.facebook.com
problem with request: connect ETIMEDOUT
Connect Times:7:www.facebook.com
problem with request: connect ETIMEDOUT
Connect Times:8:www.facebook.com</span>
    这样一来,我们就可以通过node js 更多的为我们的程序提供便利,所以我们需要思考的就是如何将它运用在项目中;

    以上就是小编在node js 的一些小心得,希望能帮到大家!

  


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值