2013-10-09 5 views
26

Я учусь использовать Node.js. В настоящее время у меня есть структура папок, которая выглядит следующим образом:Обслуживание статических файлов с RESTIFY

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 в своем приложении?

Спасибо!

+0

Возможный дубликат: http://stackoverflow.com/questions/15463841/serve-static-files-with-restify-node-js? Rq = 1 – vinaut

ответ

38

От documentation:

server.get(/\/docs\/public\/?.*/, restify.serveStatic({ 
    directory: './public' 
})); 

Но это будет искать файлы в каталоге ./public/docs/public/.
Я предпочитаю использовать __dirname ключ здесь:

server.get(/\/public\/?.*/, restify.serveStatic({ 
    directory: __dirname 
})); 

И теперь мы отображаем все /public/.* URLs в ./public/ каталог.

+0

Какое значение имеет '__dirname' в вашем случае? – letmaik

+1

[__dirname] (https://nodejs.org/docs/latest/api/globals.html#globals_dirname) –

0

Я столкнулся с этой проблемой совсем недавно, поэтому, хотя это может вам не помочь, это может помочь другим, у кого проблемы с этим.

Когда вы объявляете Restify как const restify = require('restify');, метод serveStatic будет находиться в объекте плагинов, поэтому использование restify.serveStatic будет спокойно терпеть неудачу. Правильный способ доступа к методу - restify.plugins.serveStatic.

Вы можете найти обновление документы здесь: http://restify.com/docs/plugins-api/#serve-static

4

Согласно моей текущей версии restify (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 путь в имени файла

0
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(); 
    }); 
}); 
0

Попробуйте это: Здесь вид это название директории статический ресурс

server.get('/\/.*/', restify.plugins.serveStatic({ 

    directory: __dirname + "/view/", 
    default: './home.html' 

    }) 
); 
Смежные вопросы