2013-10-09 73 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是我的web服務器的代碼。我使用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/serving-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/.* URL映射到./public/目錄。

+0

你的情況下'__dirname'有哪些值? – letmaik

+1

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

0

我剛剛遇到了這個問題,所以雖然這可能不會幫助你,但它可以幫助其他有困難的人。

當您聲明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' 

    }) 
);