Подтвердить что ты не робот

Обслуживание статических файлов с помощью 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 в своем приложении?

Спасибо!

4b9b3361

Ответ 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' 

   })
);