如何用restify指定基本路线

时间:2017-01-31 19:48:10

标签: node.js routes restify

以下作品

server.get('.*', restify.serveStatic({
    'directory': './myPublic',
    'default': 'testPage.html'
}));

我可以导航到 http:localhost:8080 ,位于/ myPublic内的静态页面会显示在浏览器中。

现在我想改变路线,以便我可以导航到 的的http:本地主机:8080 /测试即可。因此我将上面的代码改为

server.get('/test', restify.serveStatic({
    'directory': './myPublic',
    'default': 'testPage.html'
}));

不起作用,错误是

{
    "code": "ResourceNotFound",
    "message": "/test"
}

如何让它发挥作用?

2 个答案:

答案 0 :(得分:1)

<强> TL;博士;

我错误地假设了一个url / test / whatever / path 表示一个抽象的虚拟动作(类似于ASP.NET MVC路由),而不是服务器上的具体物理文件。不是解决问题的情况。

对于静态资源,无论你在网址上输入什么内容,它的工作原理如何,它必须存在于服务器上的磁盘上,从“目录”中指定的路径开始。 所以当我请求 localhost:8080 / test 时,我实际上是在磁盘上寻找资源 /myPublic/test/testPage.html ;如果我输入 localhost:8080 / test / otherPage.html ,我实际上是在磁盘上寻找资源 /myPublic/test/otherPage.html

详细信息:

使用第一条路线

server.get('.*', restify.serveStatic({
    'directory': __dirname + '/myPublic',
    'default': 'testPage.html'
}));

RegEx'。*'表示匹配任何东西!所以在浏览器中我可以输入 localhost:8080 / localhost:8080 / testPage.html localhost:8080 / otherPage.html localhost:8080 /不论/testPage.html localhost:8080 / akira / fubuki / 等等,GET请求最终会被路由到上面的处理程序,并提供路径 / myPublic /磁盘上存在testPage.html,/ myPublic / otherPage.html,/ myPublic / whatever / testpage.html,/ myPublic / kakira / fabuki / test.html.html 等,请求将被提供。

使用第二条路线

server.get('/test', restify.serveStatic({
    'directory': __dirname + '/myPublic',
    'default': 'testPage.html'
}));

此处理程序将匹配get请求 localhost:8080 / test ,它将在 public / test / testPage.html 上提供磁盘上的默认页面。

为了使处理程序更灵活,我可以使用RegEx

server.get(/\/test.*\/.*/, restify.serveStatic({
    'directory': __dirname + '/myPublic',
    'default': 'testPage.html'
}));

此RegEx表示匹配'/ test'后跟任何char(。)0次或更多次(*),后跟斜杠(/),后跟任何char 0次或更多次。示例可以是 localhost:8080 / test / localhost:8080 / testis / localhost:8080 / testicles / localhost: 8080 / test / otherPage.html localhost:8080 / testicles / otherPage.html ,并提供路径+磁盘上存在的相应文件,例如 /public/test/testPage.html,/public/testis/testPage.html,/public/testicles/otherPage.html 等等,然后将它们提供给浏览器。

答案 1 :(得分:0)

看起来restify正在寻找路线的正则表达式,而不是字符串。试试这个:

/\/test\//