2013-03-05 40 views
12

Đây là lần đầu tiên của tôi với node.js. Tôi nhận được nó để hiển thị index.html, nhưng nó không hiển thị các hình ảnh trên trang web hoặc bất cứ điều gì khác, nó chỉ hiển thị các công cụ html cơ bản. Đây là cách tôi thiết lập nó. Không có apache, php hoặc bất cứ thứ gì khác trên máy chủ, chỉ ubuntu, proftp và nút (và curl và các phụ thuộc khác). Tôi đã thực hiện thư mục chính cho các tập tin nút/var/nodeFiles và thư mục cho các tập tin html/trang web là/var/nodeFiles/www như vậy cho tập tin máy chủ nút của tôi, tôi đã làm điều đó như thế này:trang html hiển thị với node.js

var http = require('http'), 
    fs = require('fs'); 
fs.readFile('/var/nodeFiles/www/index.html', function (err, html) { 
    if (err) { 
     throw err; 
    }  
    http.createServer(function(request, response) { 
     response.writeHeader(200, {"Content-Type": "text/html"}); 
     response.write(html); 
     response.end(); 
    }).listen(80); 
}); 

này hoạt động, nhưng nó chỉ hiển thị tệp index.html và NOTHING được đính kèm với nó, vì vậy không có hình ảnh, không có hiệu ứng hoặc bất kỳ thứ gì mà tệp html sẽ hiển thị. Các tập tin và thư mục đều chính xác, tôi đã kiểm tra lại và quyền của các thư mục là chính xác. Vì vậy, những gì khác tôi phải làm gì để có được nút để hiển thị phần còn lại của trang web? Tôi hy vọng tôi đã giải thích về bản thân mình một cách chính xác, tôi được cho biết đây là nơi để đặt câu hỏi phát triển. Cảm ơn bạn đã dành thời gian đọc nội dung này.

+0

Tổng số bản sao của http://stackoverflow.com/questions/6126584/how-to-use-node-js-to-build-pages-that-are-a-mix-between-static-and- dynamic-cont? rq = 1 –

+0

Về cơ bản những gì bạn muốn làm là phục vụ nội dung tĩnh Đã có rất nhiều câu hỏi về điều này được đăng trước đây. –

+0

anh ấy tạo html trong tệp máy chủ. Tôi đã cố gắng để có một trang web hiện có và hiển thị nó bằng cách sử dụng thư viện fs. Nếu viết lại nó theo cách đó là những gì tôi phải làm, vì vậy hãy là nó. – user2137087

Trả lời

20

nhưng nó chỉ hiển thị các tập tin index.html và NOTHING gắn liền với nó, vì vậy không có hình ảnh, không có tác dụng hoặc bất cứ điều gì mà file html nên hiển thị.

Đó là vì trong chương trình của bạn, đó là điều duy nhất bạn quay lại trình duyệt bất kể yêu cầu như thế nào.

Bạn có thể có một cái nhìn tại một ví dụ hoàn chỉnh hơn mà sẽ trả lại hồ sơ đúng cho các trang web phổ biến nhất (HTML, JPG, CSS, JS) ở đây https://gist.github.com/hectorcorrea/2573391

Ngoài ra, hãy xem blog này bài viết mà tôi đã viết về cách bắt đầu với nút. Tôi nghĩ rằng nó có thể làm rõ một vài điều cho bạn: http://hectorcorrea.com/blog/introduction-to-node-js

+2

Blog của bạn đã rất hữu ích. Đến từ PHP đến nút, có một vài khái niệm cần được xóa. Tôi có một vài người tôi vừa gửi blog của bạn để có một chút thời gian thực hiện chuyển đổi. – user2137087

+0

Tôi rất vui vì bạn thích nó. –

+0

làm thế nào tôi sẽ sử dụng điều này trên AWS nếu tôi không có một ip tĩnh? 'var serverUrl =" 127.0.0.1 ";' và 'var serverUrl =" http://ec2-xx-xx-xx-xx.compute-1.amazonaws.com/ ";' không hoạt động –

5

Kiểm tra mã cơ bản này để thiết lập máy chủ html. công việc của nó cho tôi.

 
var http = require('http'), 
    fs = require('fs'); 


fs.readFile('./index.html', function (err, html) { 
    if (err) { 
     throw err; 
    }  
    http.createServer(function(request, response) { 
     response.writeHeader(200, {"Content-Type": "text/html"}); 
     response.write(html); 
     response.end(); 
    }).listen(8000); 
}); 

+2

điều này chỉ hiển thị 'index.html' và không có tệp nào khác trong thư mục đó –

+0

Trong trường hợp nếu tôi không biết đường dẫn, tôi chỉ biết url thuộc loại này" www.example.com/example/example1 " – Tripathi29

1

Nếu mục tiêu của bạn chỉ đơn giản là hiển thị một số tệp tĩnh, bạn có thể sử dụng gói Kết nối. Tôi đã có một số thành công (tôi vẫn còn khá mới với NodeJS bản thân mình), sử dụng nó và API bootstrap twitter kết hợp.

tại dòng lệnh

:\> cd <path you wish your server to reside> 
:\> npm install connect 

Sau đó, trong một tập tin (tôi đặt tên) Server.js

var connect = require('connect'), 
    http = require('http'); 
connect() 
    .use(connect.static('<pathyouwishtoserve>')) 
    .use(connect.directory('<pathyouwishtoserve>')) 
    .listen(8080); 

Cuối cùng

:\>node Server.js 

Hãy cẩn thận:

Nếu bạn don không muốn hiển thị đạo diễn y nội dung, loại trừ dòng .use (connect.directory).

Vì vậy, tôi đã tạo thư mục có tên "máy chủ" được đặt index.html trong thư mục và API bootstrap trong cùng một thư mục. Sau đó, khi bạn truy cập vào máy tính IP: 8080, nó sẽ tự động sử dụng tệp index.html.

Nếu bạn muốn sử dụng cổng 80 (vì vậy chỉ cần truy cập http: // và bạn không phải nhập: 8080 hoặc một số cổng khác).bạn sẽ cần phải bắt đầu nút với sudo, tôi không chắc chắn về các tác động bảo mật nhưng nếu bạn chỉ sử dụng nó cho một mạng nội bộ, tôi không cá nhân nghĩ rằng đó là một việc lớn. Tiếp xúc với thế giới bên ngoài là một câu chuyện khác.

Cập nhật 2014/01/28:

tôi đã không phải làm những việc sau trên các phiên bản mới nhất của tôi của sự vật, vì vậy hãy thử nó ra như trên đầu tiên, nếu nó không hoạt động (và bạn đọc lỗi phàn nàn nó không thể tìm thấy nodejs), đi trước và có thể thử dưới đây.

End Cập nhật

Ngoài ra khi chạy trong ubuntu Tôi chạy vào một vấn đề sử dụng nodejs như tên gọi (với NPM), nếu bạn đang gặp vấn đề này, tôi khuyên bạn nên sử dụng một bí danh hoặc một cái gì đó để "đổi tên" nodejs đến nút.

Commands tôi đã sử dụng (tốt hay xấu):

Tạo một file mới được gọi là nút

:\>gedit /usr/local/bin/node 
#!/bin/bash 
exec /nodejs "[email protected]" 

sudo chmod -x /usr/local/bin/node 

Đó phải làm

node Server.js 

chỉ làm việc tốt

+0

Tôi gặp lỗi trong trình duyệt của tôi có nội dung Không thể nhận /. Ý tưởng? –

+0

Ngoài ra khi tôi đặt tĩnh thành '../' Tôi nhận được lỗi nói rằng không xác định không phải là một hàm. –

+0

Tôi nghi ngờ điều này là do cập nhật trong các gói, ví dụ đơn giản ngừng làm việc cho tôi sau khi cập nhật kết nối .... Tôi phải làm một số đào để xem những gì phiên bản mới nhất sử dụng (Tôi đã tìm thấy nó tại một thời điểm nhưng không thấy bất kỳ ví dụ nào về github ngay bây giờ). * Dài truyện ngắn, bạn đang sử dụng phiên bản công cụ nào, điều đó sẽ đưa ra câu trả lời. – onaclov2000

5

này đã làm điều đó cho tôi:

var express = require('express'), 
app = express(); 
app.use('/', express.static(__dirname + '/')); 
app.listen(8080); 
Các vấn đề liên quan