2016-09-28 26 views
7

Tôi đã cài đặt http-server trên toàn cầu.nút http-server để trả lời bằng index.html đến bất kỳ yêu cầu nào

tôi khởi động nó từ mydir trên cổng localhost 8080. Trong mydir Tôi có index.html.

Nếu tôi yêu cầu (từ trình duyệt) http://localhost:8080/ Tôi nhận index.html, điều này là OK.

Nếu tôi yêu cầu mặc dù http://localhost:8080/anything Tôi không nhận được bất kỳ phản hồi nào từ máy chủ.

Những gì tôi muốn, ngược lại, đó là máy chủ của tôi luôn luôn đáp ứng bằng index.html với bất kỳ yêu cầu http đạt localhost trên cổng 8080.

Đây có phải là có thể.

Cảm ơn trước

+0

'-P hoặc proxy --proxy tất cả các yêu cầu mà không thể được giải quyết tại địa phương để các url nhất định. ví dụ: -P http: // someurl.com' => Bạn có thể thử 'http-server -P http: // localhost: 8080 /' không? – DrakaSAN

+0

Vì vậy, giải pháp trong [câu trả lời của tôi] (http://stackoverflow.com/questions/39744309/node-http-server-to-respond-with-index-html-to-any-request/39744827#39744827) hoạt động cho bạn? – rsp

Trả lời

4

Có có, với các tùy chọn -P/--proxy:

http-server -P http://localhost:8080/ 

Lưu ý rằng bất kỳ lỗi, 404 bao gồm, sẽ chuyển hướng đến chỉ số của bạn, không chỉ thiếu đường.

+0

Thật không may khi tôi làm những gì bạn đề xuất tôi nhận được (trên trình duyệt) các thông báo sau 'Không thể truy cập trang web này' và 'máy chủ cục bộ từ chối kết nối'. và 'ERR_CONNECTION_REFUSED'. Trên máy chủ, tôi thấy một luồng các yêu cầu kết thúc với chính máy chủ đang ném lỗi 'Lỗi: socket treo lên ' – Picci

+2

Tôi không biết' http-server', nhưng vì bất kỳ lỗi nào được chuyển hướng đến chỉ mục, tôi cho rằng bạn có trong một vòng lặp cho đến khi khách hàng bỏ cuộc. Cá nhân tôi sẽ làm như @rsp đã làm, viết máy chủ nhỏ của riêng bạn với tốc độ nhanh, nó cũng dễ dàng và nhanh chóng. – DrakaSAN

+1

Có. Truy cập vào 'http: // localhost: 8080/anything' sẽ chuyển hướng đến 'http: // localhost: 8080/anything' và cứ tiếp tục như vậy. Tùy chọn '--proxy' lấy phần sau tên máy chủ và cổng và gắn nó vào máy chủ/cổng proxy đã cho. –

3

Đôi khi đối với trường hợp cụ thể như thế này, thật dễ dàng, đủ để viết máy chủ của riêng bạn:

'use strict'; 
var host = '127.0.0.1', port = 3333; 
var path = require('path'); 
var app = require('express')(); 
app.get('*', (req, res) => res.sendFile(path.join(__dirname, 'index.html'))); 
app.listen(port,() => console.log(`Listening on http://${host}:${port}/`)); 

Nhưng hãy nhớ rằng nếu mỗi con đường trả index.html sau đó trong index.html bạn có thể không tham khảo bất cứ điều gì giống như hình ảnh, phong cách trang tính hoặc tệp JavaScript phía máy khách. Không chỉ với mã được hiển thị ở trên mà còn với bất kỳ giải pháp nào gửi cùng một phản hồi (index.html) đến mọi yêu cầu.

Bạn có thể cần phải thực hiện một số trường hợp ngoại lệ và nó không phải là khó khăn với Express:

'use strict'; 
var host = '127.0.0.1', port = 3333; 
var path = require('path'); 
var app = require('express')(); 
app.get('/x.png', (req, res) => res.sendFile(path.join(__dirname, 'x.png'))); 
app.get('*', (req, res) => res.sendFile(path.join(__dirname, 'index.html'))); 
app.listen(port,() => console.log(`Listening on http://${host}:${port}/`)); 

Chỉ cần ghi nhớ rằng các ngoại lệ phải đến đầu vì con đường phù hợp đầu tiên sẽ được sử dụng cho một yêu cầu nhất định .

Tất nhiên bạn cần phải lưu mã này, ví dụ: để app.js, cài đặt Express:

npm install express 

và bắt đầu nó với:

node app.js 

Đó là phức tạp hơn sử dụng một giải pháp sẵn sàng (tuy nhiên, như bạn có thể thấy, không phải là phức tạp hoặc là) nhưng bạn có nhiều linh hoạt hơn trong cách chính xác bạn muốn nó hoạt động. Nó cũng dễ dàng để thêm khai thác gỗ, vv

3

đơn giản và thẳng về phía trước ví dụ sử dụng Express 4.x:

var express = require('express'); 
var app = express(); 

var path = __dirname + '/public'; 
var port = 8080; 

app.use(express.static(path)); 
app.get('*', function(req, res) { 
    res.sendFile(path + '/index.html'); 
}); 
app.listen(port); 

thực hiện này sẽ luôn luôn đáp ứng với index.html nếu tập tin yêu cầu không được tìm thấy, và nó gần như là đơn giản như sử dụng http-server, thiếu tùy chọn này.

4

Để đạt được những gì bạn đang yêu cầu, tôi khuyên bạn nên live-server thay vì http-server.

live-server --port=8080 --entry-file=./index.html 

live-server cũng đang cung cấp một hot-tải lại nhưng nó không phải là một trong những yêu cầu của bạn

+0

không hoạt động. http-máy chủ ngay lập tức hoạt động. – mythicalcoder

+1

cảm ơn bạn - điều này giúp tôi tiết kiệm thời gian :) –

Các vấn đề liên quan