node.js 中的自定义迷你路由器
custom mini router in node.js
我要实现一个自定义的迷你路由器,并且一直在寻找 express js 的灵感。
谁能指导我如何使用 express js 创建路由处理程序。
例如,下面的内容如何实现?
节点服务器代码
http.createServer(function (req, res) { //how routing is done after?
//req???
req.get("/customers", function(){})
req.get("/customers/:id", function(){})
}).listen(9615);
express js是用正则表达式吗?还请指向 github 存储库中的正确脚本。
你需要检查这个https://github.com/expressjs/express/blob/master/lib/router/index.js。这是 expressjs 的一个单独模块,用于路由,您可以将其取出供您个人使用,而无需重新发明轮子。
[编辑] - 给出如何完成的想法。
var routes = [];
var app = {};
app.get = function(pattern, cb) {
var splits = pattern.split("/");
var route = "";
var regex = "";
for(i=0; i < splits.length; i++) {
if (splits[i].indexOf(':') === -1) {
route += splits[i]+"/";
} else {
regex = splits[i].replace(":", "");
}
}
routes.push({ route : routes, regex : regex, cb: cb });
}
app.get("/customers", callback);
.
.
.
// handle incoming request. requestPath comes from server
var requestPath = "/customers"; // example only.
app.handleRequest(requestPath) {
for(i = 0; i < routes.length; i++) {
if(routes[i].route === requestPath) {
cb = routes[i].cb;
}
}
cb();
}
请看the Express JS documentation。就差不多了。比如一段使用Express JS的代码:
// GET method route
app.get('/', function (req, res) {
res.send('GET request to the homepage');
});
// POST method route
app.post('/', function (req, res) {
res.send('POST request to the homepage');
});
至于正则表达式,是的,你可以使用它们。例如:
app.get('/ab(cd)?e', function(req, res) {
res.send('ab(cd)?e');
});
此外,请看the Express JS GitHub repository中的一个例子。
关于 Express JS 中的 Router 实现,请查看 their GitHub code (router script)。
感谢robertklep。
在 express js 的底层使用 path-to-regexp。
我还从他们的页面中找到了 express js 用来解析 URL link
的正则表达式
/^(?:\/(?=$))?$/i
当我想要的只是一个基本的路由器而没有在我的项目中获得整个框架及其所有依赖项时,这里涉及的重新发明轮子并不多。
我要实现一个自定义的迷你路由器,并且一直在寻找 express js 的灵感。
谁能指导我如何使用 express js 创建路由处理程序。
例如,下面的内容如何实现?
节点服务器代码
http.createServer(function (req, res) { //how routing is done after?
//req???
req.get("/customers", function(){})
req.get("/customers/:id", function(){})
}).listen(9615);
express js是用正则表达式吗?还请指向 github 存储库中的正确脚本。
你需要检查这个https://github.com/expressjs/express/blob/master/lib/router/index.js。这是 expressjs 的一个单独模块,用于路由,您可以将其取出供您个人使用,而无需重新发明轮子。
[编辑] - 给出如何完成的想法。
var routes = [];
var app = {};
app.get = function(pattern, cb) {
var splits = pattern.split("/");
var route = "";
var regex = "";
for(i=0; i < splits.length; i++) {
if (splits[i].indexOf(':') === -1) {
route += splits[i]+"/";
} else {
regex = splits[i].replace(":", "");
}
}
routes.push({ route : routes, regex : regex, cb: cb });
}
app.get("/customers", callback);
.
.
.
// handle incoming request. requestPath comes from server
var requestPath = "/customers"; // example only.
app.handleRequest(requestPath) {
for(i = 0; i < routes.length; i++) {
if(routes[i].route === requestPath) {
cb = routes[i].cb;
}
}
cb();
}
请看the Express JS documentation。就差不多了。比如一段使用Express JS的代码:
// GET method route
app.get('/', function (req, res) {
res.send('GET request to the homepage');
});
// POST method route
app.post('/', function (req, res) {
res.send('POST request to the homepage');
});
至于正则表达式,是的,你可以使用它们。例如:
app.get('/ab(cd)?e', function(req, res) {
res.send('ab(cd)?e');
});
此外,请看the Express JS GitHub repository中的一个例子。
关于 Express JS 中的 Router 实现,请查看 their GitHub code (router script)。
感谢robertklep。
在 express js 的底层使用 path-to-regexp。
我还从他们的页面中找到了 express js 用来解析 URL link
的正则表达式/^(?:\/(?=$))?$/i
当我想要的只是一个基本的路由器而没有在我的项目中获得整个框架及其所有依赖项时,这里涉及的重新发明轮子并不多。