2011-12-18 29 views
7

Tôi đã cài đặt node.js từ http://nodejs.org/#download, v0.6.6. Tôi đang sử dụng Windows 7 32-bit.Ví dụ cơ bản về Node.js không hoạt động trên Windows 7

Tôi đã trải qua nhiều tuts trực tuyến khác nhau và muốn thử nghiệm trong khi làm như vậy, nhưng dường như tôi không thể làm việc node.js. Nút sẽ chạy tệp .js của tôi, nhưng mọi yêu cầu từ trình duyệt đều hết thời gian.

Đây là một điển hình Hello World ví dụ mà không hoạt động:

var http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World\n'); 
}).listen(1337); 

trỏ trình duyệt của tôi tại 127.0.0.1:1337 hoặc localhost: 1337 không hoạt động. Yêu cầu từ trình duyệt hết giờ. Tôi cũng đã thử nghe (1337, '0.0.0.0') và nghe (1337, '127.0.0.1').

Tôi biết máy chủ đang chạy; nếu tôi CTRL + C và dừng nút, trình duyệt sẽ ngay lập tức quay trở lại với ERR_CONNECTION_RESET.

Tôi cũng đã thử chạy mã trong gist này, thao tác này sẽ không hoạt động: https://gist.github.com/1339846. Tôi kết thúc với đầu ra giao diện điều khiển "Nghe!" và sau đó không có gì khác.

Hơn nữa, tôi đã cố gắng cổng khác nhau, và tường lửa của tôi tắt qua

netsh firewall set opmode mode=disable 

Tôi đã thử với tường lửa hoàn toàn tàn tật, và các dịch vụ dừng lại. Nếu tôi kiểm tra các kết nối bằng netstat -noa, tôi có thể thấy nút có một loạt các kết nối được mở cho các trình duyệt, tất cả trong trạng thái CLOSE_WAIT. Vì vậy, có vẻ như các kết nối đang diễn ra, nhưng node.js không hoạt động.

Chức năng gọi lại được cho là được khởi xướng bởi một yêu cầu không bao giờ thực hiện - tôi đã rải một số câu lệnh console.log ở các khu vực khác nhau, và tất cả chúng đều thực thi ngoại trừ bất kỳ lệnh gọi lại nào.

Tôi đã gỡ cài đặt, cài đặt lại, đã thử một vài bản dựng trước, khởi động lại máy của tôi ... không có gì.

Mọi trợ giúp đều được đánh giá cao!

CẬP NHẬT: Tôi vừa từ bỏ. Tôi đã thử tất cả mọi thứ tôi có thể nghĩ đến, và nó đã được kết thúc dễ dàng hơn để chạy node.js trong một thể hiện của Ubuntu trong VirtualBox hơn nắm bắt ở ống hút.

+1

Thay đổi cổng đến 8000 hoặc 8080 và thử lại. Hãy cho tôi biết nó đến như thế nào. – alessioalex

+0

Tôi đã thử những cổng đó và các cổng khác. – CircusNinja

+0

Phải có một cái gì đó với tường lửa, tôi đã cài đặt Node trên W7 trên PC và trên Windows XP trên 2 PC khác và nó hoạt động ở mọi nơi. – alessioalex

Trả lời

2

Tôi vừa thử nó và nó hoạt động cho tôi. Đảm bảo bạn không chặn nút bằng tường lửa của mình.

+1

Tường lửa bị vô hiệu hóa và nó vẫn không hợp tác. – CircusNinja

2

Tôi đang sử dụng Windows 7 32 bit.

Bạn đang sử dụng phiên bản Windows 7 nào? Ví dụ. Trang chủ Premium, Professional, Ultimate?

Một chủ đề trên npm github project đề cập đến các triệu chứng tương tự trong khi cài đặt mô-đun nodejs bằng cách sử dụng npm và các nhận xét dường như thu hẹp xuống do Windows 7 Professional gây ra. Nó là 32/64-bit dường như không quan trọng.

Tôi gặp cả vấn đề bạn mô tả, cũng như vấn đề cài đặt npm và đang chạy trên Windows 7 Professional 64-bit.

Sử dụng XPMode (giải pháp được đề cập trong chuỗi npm) đã cho phép tôi khắc phục cả hai vấn đề này.Mặc dù, tôi cho rằng đây chỉ là một phiên bản Windows-y của việc bạn sử dụng Ubuntu trong VirtualBox.

cách giải quyết khác đã cố gắng nhưng không thành công:

  • Make/chạy một xây dựng gỡ lỗi của v0.6.6
  • Make/chạy một xây dựng gỡ lỗi của v0.6.5 (trên thực tế đã bị rơi trong khi khởi động)
  • Đặt khác nhau Chế độ tương thích trên các cài đặt node.exe
  • đóng gói sẵn của Windows cài đặt của v0.6.5
+0

Tôi đang sử dụng Ultimate. Cảm ơn bạn đã biết mẹo về vấn đề này; sẽ rất thú vị nếu nó liên quan. – CircusNinja

1

tôi đã gặp vấn đề tương tự wit h mã này (Http server ví dụ từ liên kết này: http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/)

var http = require("http"); 
http.createServer(function (request, response) { 
    request.on("end", function() { 
     response.writeHead(200, { 
      'Content-Type': 'text/plain' 
     }); 
     response.end('Hello HTTP!'); 
    }); 
}).listen(8080); 

tôi đã cố gắng windows 7 phiên bản 64-bit, Windows XP máy ảo, máy ảo ubuntu ... không có gì! Nó chỉ hoạt động sau khi tôi nhận xét dòng "request.on". Ví dụ của bạn (mà không có dòng này) làm việc tốt cho tôi. Tôi đang sử dụng bản dựng ổn định mới nhất từ ​​node.js (v0.10.18 cho windows hoặc linux). Hy vọng điều này sẽ giúp bất cứ ai gặp rắc rối với điều này.

+0

Tính năng này hoạt động trên Windows 7 Pro của tôi. –

8

!!!!!! Cùng một vấn đề xảy ra đối với tôi ....

Dưới đây là một giải pháp mà tôi vẫn chưa tìm thấy bất cứ nơi nào:

Look in Windows Firewall with Advanced Security và xem nếu Evented I/O for V8 JavaScript bị chặn hoặc xuất hiện hai lần.

Nếu bỏ chặn và xóa mục nhập trùng lặp. Nếu bạn cài đặt/gỡ cài đặt/cài đặt nodeJs, sẽ có 2 mục nhập.

Ngoài ra khi nút đầu tiên chạy hộp thoại Tường lửa cửa sổ sẽ mở ra hỏi bạn có muốn cho phép nút truy cập tường lửa không. Nếu bạn bấm "Không" hoặc chỉ đóng cửa sổ mà không hỏi, nó sẽ tạo ra Evented I/O for V8 JavaScript VÀ NÓ S BL ĐƯỢC CHẶN.

+0

Mỏ có hai mục, cả hai đều được cho phép. Đã xóa một, vẫn không thành công: ( –

+0

Hãy thử tắt tường lửa và kiểm tra nó –

+0

Cài đặt phiên bản mới nhất đã làm thủ thuật! –

3

Tôi gặp vấn đề tương tự và sau khi đọc qua tài liệu, tôi bất ngờ gặp phải những gì tôi tin là giải pháp. Trong trường hợp của tôi, tôi đã nhận thấy rằng các yêu cầu gửi đến được gửi đến nút, nhưng phản hồi không bao giờ có sự kiện 'kết thúc' được kích hoạt. Vì vậy, việc thay đổi các quy tắc tường lửa đến trong các cửa sổ dường như không liên quan đến vấn đề.

Vì vậy, http.createServer nhận một đối số - một hàm cần bao gồm thông số yêu cầu và phản hồi. Tham số yêu cầu dường như là nơi đặt sự cố. Tham số yêu cầu là một phiên bản của http.incomingMessage. Lớp này chỉ có một kiểu sự kiện, nhưng chính bản thân nó cũng là một sự thực thi của Stream.Readable, đó là nơi tôi tìm thấy sự kiện 'kết thúc' không được kích hoạt. Thực sự không có lý do nào khác để kiểm tra sự kiện đầu tiên không được kích hoạt, tôi chỉ thêm một người nghe cho một loại sự kiện khác ('có thể đọc được') và chỉ thêm một dòng console.log vào đó làm cho toàn bộ công việc hoạt động.

Vì vậy, các mã trông đơn giản là một cái gì đó như thế này:

var http = require("http"); 
http.createServer(function (request, response) { 
    console.log('request'); 
    request.on('readable', function(){ 
     console.log('request readable'); 
    }); 
    request.on("end", function() { 
     console.log('request end'); 
     response.writeHead(200, { 
      'Content-Type': 'text/plain' 
     }); 
     response.end('Hello HTTP!'); 
    }); 
}).listen(8080); 

Đoạn mã trên hoạt động, trong khi các phiên bản trước đây mà không có một 'đọc' sự kiện người nghe không bao giờ trả lời:

var http = require("http"); 
http.createServer(function (request, response) { 
    console.log('request'); 
    request.on("end", function() { 
     console.log('request end'); 
     response.writeHead(200, { 
      'Content-Type': 'text/plain' 
     }); 
     response.end('Hello HTTP!'); 
    }); 
}).listen(8080); 

tôi không chắc chắn lý do tại sao công trình này ngoại trừ một đầu mối nhỏ trong tài liệu đọc:

Trong một số trường hợp, nghe ng cho một sự kiện 'có thể đọc' sẽ gây ra một số dữ liệu để được đọc vào bộ đệm bên trong từ hệ thống cơ bản, nếu nó chưa có.

1
  1. Đến "Control Panel \ All Control Panel Items \ Windows Firewall \ phép Programs"
  2. Nhấn Allow Chương
  3. chọn nodejs từ danh sách.

này cố định tất cả các vấn đề đối với tôi

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