2013-04-09 33 views
19

Kịch bản: Hãy xem xét mã sau đây để cung cấp JavaScript làm phản hồi từ máy chủ Node.JS.Node.js res.setHeader ('content-type', 'text/javascript'); đẩy javascript phản hồi dưới dạng tệp tải xuống

var http = require('http'); 

http.createServer(function (req, res) { 
var JS_Script = 'function Test() { alert("test success")}'; 
res.setHeader('content-type', 'text/javascript'); 
res.end(JS_Script); 
}).listen(8811); 

Vấn đề: Trình duyệt buộc tải xuống tệp.

Câu hỏi: Tôi làm cách nào để hiển thị trên trình duyệt?

Note: Làm việc trong dịch vụ web .net với cùng HTTP-header: 'content-type', 'text/javascript'

Vì vậy, phát biểu sau đây rõ ràng nó không giữ tốt.
Nếu bạn muốn có một trình duyệt web để làm cho HTML, bạn nên thay đổi này để:

Content-Type: text/html 

Cập nhật: Trên kiểm tra việc content-type trong quá trình tải của nó application/octet-stream

Nhưng cùng khi tôi nhấn một yêu cầu với curl, sau đây là kết quả:

C:\>curl -is http://localhost:8811/ 
HTTP/1.1 200 OK 
Content-Type: text/javascript 
Content-Length: 166 
Date: Tue, 09 Apr 2013 10:31:32 GMT 
Connection: keep-alive 

function Test() { alert("test success")} 
+1

'res.send()' là Express-ism và không khả dụng khi bạn sử dụng 'http' đơn giản. Vì vậy, tôi nghĩ rằng mã mẫu của bạn không phải là 100% những gì bạn đang thực sự sử dụng. – robertklep

+0

sử dụng 'application/javascript' làm kiểu nội dung – mithunsatheesh

Trả lời

34

Sử dụng application/javascript loại như nội dung thay vì text/javascript

text/javascript được đề cập lỗi thời. Xem tài liệu tham khảo docs.

http://www.iana.org/assignments/media-types/application

Cũng thấy câu hỏi này trên SO.

UPDATE:

Tôi đã cố gắng thực hiện các mã bạn đã đưa ra và bên dưới không hoạt động.

res.setHeader('content-type', 'text/javascript'); 
res.send(JS_Script); 

Đây là những gì hiệu quả đối với tôi.

res.setHeader('content-type', 'text/javascript'); 
res.end(JS_Script); 

Như robertklep đã gợi ý, xin vui lòng tham khảo các node http docs, không có response.send() đó.

+2

' setHeader' thậm chí không được vinh danh, vì vậy có điều gì đó khác đang diễn ra. – robertklep

+0

http://expressjs.com/en/api.html#res send is there – caub

5

Bạn có thể trực tiếp đặt kiểu nội dung như dưới đây:

res.writeHead(200, {'Content-Type': 'text/plain'}); 

Để tham khảo đi qua nodejs Documents link.

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