2017-01-31 10 views
0

следующие работыкак определить основные маршруты с restify

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

я могу перейти к HTTP: локальный: 8080 и статическая страница находится внутри/myPublic отображается в браузере.

Теперь я хочу изменить маршрут, чтобы я мог перейти на http: localhost: 8080/test. Поэтому я изменил код выше на

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

не работает, ошибка

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

Как заставить его работать?

ответ

1

tl; dr;

я ошибочно принял URL /тест/что/путем представляет собой абстрактную виртуальную акцию (по аналогии с ASP.NET MVC маршрутизации), а не конкретные физические файлов на сервере. Не в том случае, если вы это сделаете.

Как работают исправления для статических ресурсов, независимо от того, что вы набираете на URL-адресе, он должен существовать на диске на сервере, начиная с пути, указанного в «каталоге». Итак, когда я спрашиваю 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' 
})); 

регулярное выражение '*' говорит соответствовать что-нибудь! Таким образом, в браузере я могу ввести локальный: 8080/, локальный: 8080/testPage.html, локальный: 8080/otherPage.html, локальный: 8080/все/testPage.html, локальный: 8080/akira/fubuki/ и т. Д., И запрос GET будет перенаправлен на вышеупомянутый обработчик и предоставил пути /myPublic/testPage.html, /myPublic/otherPage.html, /myPublic/whatever/testpage.html , /myPublic/akira/fubuki/testpage.html и т. д. на диске, запрос будет подан.

С второго маршрутом

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

этот обработчик будет соответствовать запросу GET локальных: 8080/теста, и он будет служить страницу по умолчанию на диске в общественном/тесте/тестовой странице.html.

Для того, чтобы обработчик более гибким, я мог бы использовать RegEx

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

Это RegEx говорит матч «/ тест», а затем любой символ (.) 0 или более раз (*), а затем slash (/), за которым следует любой символ 0 или более раз. Примеры могут быть LocalHost: 8080/тест/, локальный: 8080/семенник/, локальный: 8080/семенника/, локальный: 8080/тест/otherPage.html, LocalHost: 8080/семенника/otherPage .html и при условии, что пути + соответствующие файлы существуют на диске, например /public/test/testPage.html, /public/testis/testPage.html, /public/testicles/otherPage.html и т. Д., Тогда они будут отправлены в браузер.

0

Похоже, что restify ищет регулярное выражение для маршрута, а не строку. Попробуйте следующее:

/\/test\// 
+0

Да, я также пробовал регулярное выражение перед отправкой вопроса, но это не сработало. Я провел дальнейшие эксперименты и вскоре отправлю ответ. По моему скромному мнению, концепция маршрутизации в восстановлении нарушается. – joedotnot

 Смежные вопросы

  • Нет связанных вопросов^_^