2013-10-09 21 views
26

Tôi đang học cách sử dụng Node.js. Hiện tại, tôi có cấu trúc thư mục trông giống như sau:Cung cấp các tệp tĩnh với 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 là mã máy chủ web của tôi. Tôi chạy lệnh này từ một dòng lệnh bằng cách sử dụng node server.js. Nội dung của tệp đó là:

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

Như bạn thấy, máy chủ này dựa trên RESTIFY. Tôi đã nói rằng tôi phải sử dụng RESTIFY. Tuy nhiên, tôi không thể tìm ra cách để phục vụ các tệp tĩnh. Ví dụ: làm cách nào để tôi xử lý các tệp * .html, * .css, * .png và * .js trong ứng dụng của tôi?

Cảm ơn bạn!

+0

Có thể trùng lặp: http://stackoverflow.com/questions/15463841/serve-static-files-with-restify-node-js? Rq = 1 – vinaut

Trả lời

38

Từ documentation:

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

Nhưng điều này sẽ tìm kiếm các file trong thư mục ./public/docs/public/.
Tôi thích sử dụng __dirname mấu chốt ở đây:

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

Và bây giờ chúng tôi bản đồ tất cả /public/.* url để ./public/ thư mục.

+0

Giá trị nào '__dirname' có trong trường hợp của bạn? – letmaik

+1

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

0

Tôi đã gặp vấn đề này chỉ trong thời gian gần đây, vì vậy trong khi điều này có thể không giúp bạn, nó có thể giúp những người khác đang gặp sự cố với nó.

Khi bạn khai báo Restify là const restify = require('restify');, phương thức serveStatic sẽ nằm trong đối tượng plugin để sử dụng restify.serveStatic sẽ lặng lẽ thất bại. Cách chính xác để truy cập phương thức là restify.plugins.serveStatic.

Bạn có thể tìm thấy bản cập nhật tài liệu ở đây: http://restify.com/docs/plugins-api/#serve-static

4

Theo phiên bản hiện tại của tôi restify (v5.2.0)

các serveStatic đã được di chuyển vào plugins, vì vậy mã sẽ như thế nào

này
server.get(
    /\/(.*)?.*/, 
    restify.plugins.serveStatic({ 
    directory: './static', 
    }) 
) 

Cú pháp trên sẽ phân phát tệp tĩnh của bạn trên thư mục static. Vì vậy, bạn có thể lấy tệp tĩnh như http://yoursite.com/awesome-photo.jpg

Ví dụ: nếu bạn muốn phân phối tệp tĩnh theo đường dẫn cụ thể như ví dụ này http://yoursite.com/assets/awesome-photo.jpg.

Mã nên được refactored vào này

server.get(
    /\/assets\/(.*)?.*/, 
    restify.plugins.serveStatic({ 
    directory: `${app_root}/static`, 
    appendRequestPath: false 
    }) 
) 

Tùy chọn appendRequestPath: false trên có nghĩa là chúng tôi không bao gồm đường dẫn assets vào tên file

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

Hãy thử điều này: Ở đây xem là một tên thư mục tài nguyên tĩnh

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

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

    }) 
); 
Các vấn đề liên quan