在节点中设置路由

时间:2014-09-07 14:36:04

标签: node.js routes

我有一个计算圆的面积和周长的模块。该模块有两个函数areacircumference,它们是根据传入的半径值计算的。在我的代码中,我导入了这个模块并将其命名为var t。我想要做的是输出区域或周长的值,具体取决于传递给网址的值。 即:如果网址为localhost:8080/circ/4,页面将显示"周长的值为+ t(4)"如果网址为localhost:8080/area/4,则会显示"该区域的值为+ t(4)"。

我知道如何使用express和hapi编写它,但是如何使用纯节点设置路由,以便request.params.value value是半径的值?我无法找到任何示例,大多数示例都使用express。

var http = require('http');
var t = require('./modules/myModule.js');


var server = http.createServer();


server.on("request", function(request, response){
    console.log("Request received!");
    response.writeHead (200, {"Content-type": "text/plain"});
    response.write("The value of the circumfrence is ");
    response.end();
  }
);

server.listen(8080);
console.log("Server running on port 8080"); 

1 个答案:

答案 0 :(得分:1)

开箱即用,节点不会从你的请求网址中解析params,你必须自己做。一种方法是使用正则表达式来匹配每条路线。一个基于你的例子,它实现了circ端点:

var http = require('http');
var server = http.createServer();

server.on('request', function(request, response){
    // console.log('Request received!');
    var circUrlRegex =/^\/circ\/(\d+)$/;
    var match = circUrlRegex.exec(request.url);
    if (match) {
        var radius = parseInt(match[1], 10);
        var circumference = 2*Math.PI*radius;
        response.writeHead(200, {'Content-type': 'text/plain'});
        response.write('The value of the circumfrence is ' + circumference);
    }
    else {
        response.writeHead(404);
    }
    response.end();
});

server.listen(8080);

当然,如果要添加其他路由,将所有内容转储到请求事件处理程序中很快就会变得无法维护。然后你可能想要构建一个系统来注册路由,并让处理程序逐个循环遍历它们,直到找到匹配为止。

最后一件事:你可能想看看Restify。它是一个很好的支持库,用于构建api,而不是所有的快速Express附带。