Специфичные для модуля статические ресурсы Node.js - PullRequest
4 голосов
/ 13 октября 2011

Существует ли элегантный способ объединения статических клиентских файловых ресурсов (сценариев, изображений и т. Д.) В модуль Express и систематического предотвращения конфликтов имен? Достаточно просто зарегистрировать экземпляр статического объекта для модуля, например, так:

app.use(express.static(modulePath + '/public'));
app.use(express.static(__dirname + '/public'));

но если обе директории содержат файл "styles.css", может показаться, что тот из модуля затмит тот, что для приложения. Чтобы избежать этой проблемы, можно использовать подкаталог в общедоступном модуле, но мне действительно нужен способ сопоставления ресурсов модуля с произвольным путем, так что

http://localhost:3000/mymodule/styles.css => <modulePath>/public/styles.css
http://localhost:3000/styles.css => <appPath>/public/styles.css

Уже есть способ сделать это? Я уже сделал это с помощью трюков кодирования, поэтому я действительно ищу рекомендуемый способ сделать это. Кроме того, если мне не хватает какой-то ключевой концепции, которая делает это совершенно ненужным, я бы тоже хотел об этом узнать.

Ответы [ 2 ]

5 голосов
/ 13 октября 2011

Вы можете создать другой экземпляр connect.static и использовать его в маршруте:

app = express.createServer()

app.configure(function(){
    app.use(express.static(__dirname+'/public'))
})

// new static middleware
var myModuleStatic = express.static(__dirname+'/mymodule')

// catch all sub-directory requests
app.get('/mymodule/*', function(req, res){
    // remove subdir from url (static serves from root)
    req.url = req.url.replace(/^\/mymodule/, '')
    // call the actual middleware, catch pass-through (not found)
    myModuleStatic(req, res, function(){
        res.send(404)
    })
})

app.listen(5555)
3 голосов
/ 07 марта 2012

Примерно так же должно работать:

app.use(express.static(__dirname + '/public'));    
app.use('/mymodule', express.static(modulePath + '/public'));

См .: http://groups.google.com/group/express-js/browse_thread/thread/c653fafc35fa85ed

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...