我有一个计算圆的面积和周长的模块。该模块有两个函数area
和circumference
,它们是根据传入的半径值计算的。在我的代码中,我导入了这个模块并将其命名为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");
答案 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附带。