前几天写了路由的前端设置,也是spa的必要条件,既然前端路由设置好了,那么后端势必也要有路由系统相配套。这里以nodejs为例,简单的路由实现,参考了一些网上的文章以及express等开源库,是很简单的路由实现。
这里不涉及排查重复路由,当然添加上去也是很简单的。
先是index.js的代码:

var server=require("./server");

var app = server.router();

app.set('/demo',function () {
  return 'demo';
})

app.set('/test',function () {
  return 'test';
})

app.start()

从上面大概可以看到router的api了,只有两个api,一个是set,一个是start,set负责设置路由,start负责启动服务器。
然后是server.js:

var http = require('http');
var url = require('url');
var router = function () {
  function App () {
    this.path={};
  }
  App.prototype = {
    set : function (route,handler) {
      this.path[route]=handler;
    },
    start: function () {
      var path = this.path
      function handleRequest (req,res) {
        if( typeof path[req.url] === 'function' ){
          var content = path[req.url]();
        }else {
          var content = '404 Not Found';
        }
        var pathname = url.parse(req.url).pathname;
        console.log('request for ' + pathname +'recevied');
        res.write(content);
        res.end();
      }
      http.createServer(handleRequest).listen(3000,()=>{console.log('port 3000');})
    }
  };

  return new App();
}

exports.router = router;

如上,可以看到引入了url和http模块,url负责解析pathname,http负责创建服务器,最后返回App的实例,this.path里存储着已经在设置好的路由及其回调函数,这边仅仅是简单的返回一个值,具体还要更改。至于start里的handleRequest就是具体返回内容了,具体可以看http的相关api。就这简单的代码就是一个初级的路由模块。


当然还有更多的功能可以实现。比如渲染模板,类似flask的render_template

代码如下:

var fs = require('fs');
var path = require('path');

function renderTemplate (file) {
  var html = fs.readFileSync(path.dirname()+'/templates/'+file).toString();
  return html;
}

module.exports=renderTemplate

都是很简单的实现。虽然没有具体看express的渲染部分,不过我估计也是差不多的。

app.set('/demo',function () {
    return renderTemplate('index.html')
})

我这里是先放在templates的文件夹里,模仿flask。大概如此。
接下来要做的就是前端路由和后端路由相配合。构成spa的雏形。


xiadd
2.6k 声望88 粉丝