以下作品
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"
}
如何让它发挥作用?
答案 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\//