node.js 能否实现重写地址,cnodejs.org/user/youname 能重写成这样,cnodejs.org/youname更好记
4 回复
可以的,只需要在服务端配置一下。如果你用express,请配置2个key对应一个value。 如果是你用rrestjs,那就更好办了。还是跟你说说原理吧。
假设你要进入的网站是http://cnodejs.org/,后面
/user/youname
或者/yourname
称之为你的请求路径,url请求路径一定是对应你后台的某个文件的某个方法的,例如java中/crm/user!index.html
就是向后台的crm
模块请求user
文件的index
方法。nodejs也是这样的,查阅nodejs-api或者一些文章,不难发现,请求路径是可以通过url.path获取的,通过解析path,能获取
/user/youname
或者/yourname
的字符串,你只要将这2个请求对应到同一个方法即可。例如我想要自动分配url请求:
var paths = req.url.substring(1).split(/\/|!|\.|\?/);
paths[2] = paths[2] || 'main';
paths[1] = paths[1] || 'index';
paths[0] = paths[0] || 'crm';
require(__dirname + paths[0] + '/' + paths[1])[paths[2]](req, res);
此时我请求/crm/user!index.html时,他将映射到我后台主目录下的crm文件夹下的user文件里的index方法。如此这般,要让/index也请求到这个方法,只需要代码:
if( req.url=='/index'){
require(__dirname+'crm'+'/'+'user')['index'](req,res);
}