Обслуживание статических файлов с помощью RESTIFY
Я учусь использовать Node.js. В настоящее время у меня есть структура папок, которая выглядит следующим образом:
index.html
server.js
client
index.html
subs
index.html
page.html
res
css
style.css
img
profile.png
js
page.js
jquery.min.js
server.js - мой код веб-сервера. Я запускаю это из командной строки с помощью node server.js
. Содержимое этого файла:
var restify = require('restify');
var server = restify.createServer({
name: 'Test App',
version: '1.0.0'
});
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.get('/echo/:name', function (req, res, next) {
res.send(req.params);
return next();
});
server.listen(2000, function () {
console.log('%s running on %s', server.name, server.url);
});
Как вы можете видеть, этот сервер использует RESTIFY. Мне сказали, что я должен использовать RESTIFY. Однако я не могу понять, как обслуживать статические файлы. Например, как я могу хранить файлы *.html, *.css, *.png и *.js в своем приложении?
Спасибо!
Ответы
Ответ 1
В документации :
server.get(/\/docs\/public\/?.*/, restify.serveStatic({
directory: './public'
}));
Но это будет поиск файлов в каталоге ./public/docs/public/
.
Я предпочитаю использовать __ dirname здесь:
server.get(/\/public\/?.*/, restify.serveStatic({
directory: __dirname
}));
И теперь мы сопоставляем все /public/.*
URL-адреса с каталогом ./public/
.
Ответ 2
В соответствии с моей текущей версией обновления (v5.2.0)
serveStatic
был перемещен в plugins
, поэтому код будет таким:
server.get(
/\/(.*)?.*/,
restify.plugins.serveStatic({
directory: './static',
})
)
Синтаксис выше будет служить вашим статическим файлам в папке static
. Таким образом, вы можете получить статический файл, например http://yoursite.com/awesome-photo.jpg
По какой-то причине, если вы хотите обслуживать статические файлы под определенным путем, например, http://yoursite.com/assets/awesome-photo.jpg
.
Код должен быть реорганизован в этот
server.get(
/\/assets\/(.*)?.*/,
restify.plugins.serveStatic({
directory: `${app_root}/static`,
appendRequestPath: false
})
)
Параметр appendRequestPath: false
выше означает, что мы не включаем путь assets
в имя файла
Ответ 3
Я столкнулся с этой проблемой совсем недавно, поэтому, хотя это может вам не помочь, это может помочь другим, у кого проблемы с этим.
Когда вы объявляете Restify как const restify = require('restify');
, метод serveStatic будет находиться в объекте плагинов, поэтому использование restify.serveStatic
будет терпеть неудачу. Правильный способ доступа к методу - restify.plugins.serveStatic
.
Здесь вы можете найти документы для обновления: http://restify.com/docs/plugins-api/#serve-static
Ответ 4
server.get('/', function(req, res, next) {
fs.readFile(__dirname + '/index.html', function (err, data) {
if (err) {
next(err);
return;
}
res.setHeader('Content-Type', 'text/html');
res.writeHead(200);
res.end(data);
next();
});
});
Ответ 5
Попробуйте следующее: здесь представление представляет собой имя каталога статического ресурса
server.get('/\/.*/', restify.plugins.serveStatic({
directory: __dirname + "/view/",
default: './home.html'
})
);