2012-03-09 26 views
32

Tôi đang cố gắng để bắt đầu phục vụ một số trang web tĩnh nhờ sủ dụng connect như thế này:"Không thể GET /" với Connect trên Node.js

var connect = require("connect"); 
var nowjs = require("now"); 
var io = require("socket.io"); 


var app = connect.createServer(
    connect.static(__dirname + '/public') 
); 

app.listen(8180); 

Vì vậy, tôi đã thêm một đơn giản index.html ở thư mục /public trên cùng thư mục với file app.js, nhưng khi tôi cố gắng để xem trang trên trình duyệt của tôi tôi nhận được phản ứng này từ nút:

không thể GET/

Tôi đang làm gì sai và tôi có thể sửa nó như thế nào?

Trả lời

10

Mã này nên làm việc:

var connect = require("connect"); 

var app = connect.createServer().use(connect.static(__dirname + '/public')); 

app.listen(8180); 

Cũng trong phương thức connect 2.0 .createServer() bị phản đối. Sử dụng connect() để thay thế.

var connect = require("connect"); 

var app = connect().use(connect.static(__dirname + '/public')); 

app.listen(8180); 
+7

Ahh, cảm ơn rất nhiều. Tất cả các bài viết node.js cũ này khiến tôi thực sự bối rối với những điều không được chấp nhận. –

+0

Tôi đã thử cả hai và cả hai đều nói rằng undefined không phải là một chức năng. Trong ví dụ đầu tiên, điều này cho tôi biết rằng .createServer() không phải là một hàm và trong ví dụ thứ hai __dirname là không hợp lệ. –

-1

Bạn thường muốn làm mẫu như thế này:

app.get('/', function(req, res){ 
    res.render('index.ejs'); 
}); 

Tuy nhiên bạn cũng có thể cung cấp nội dung tĩnh - để làm như vậy sử dụng:

app.use(express.static(__dirname + '/public')); 

Bây giờ tất cả mọi thứ trong thư mục/thư mục công cộng của dự án của bạn sẽ được phân phối dưới dạng nội dung tĩnh tại gốc của trang web của bạn, ví dụ: nếu bạn đặt default.htm trong thư mục công khai nếu có sẵn bằng cách truy cập /default.htm

Hãy xem qua express API và Kết nối tài liệu trung gian tĩnh để biết thêm thông tin.

1
var connect = require('connect'); 
var serveStatic = require('serve-static'); 
var app = connect(); 
app.use(serveStatic('../angularjs'), {default: 'angular.min.js'}); app.listen(3000); 
+0

Tạo thư mục angularjs. Tạo tệp index.html bên trong nó. – prashantsahni

+0

Trong khi khối mã này có thể trả lời câu hỏi, sẽ tốt nhất nếu bạn có thể cung cấp một giải thích nhỏ cho lý do tại sao nó thực hiện như vậy. – PlasmaHH

+0

Tôi đang sử dụng mô-đun serveStatic, thực hiện công việc. – prashantsahni

24

Bạn có thể có mặt ở đây vì bạn đang đọc cuốn sách Apress PRO AngularJS ...

Như được mô tả trong một chú thích để this question bởi KnarfaLingus:

[START QUOTE]

Các mô-đun kết nối đã được tổ chức lại. làm:

npm install connect 

và cũng

npm install serve-static 

Sau đó bạn server.js có thể được viết như sau:

var connect = require('connect'); 
var serveStatic = require('serve-static'); 
var app = connect(); 

app.use(serveStatic('../angularjs')); 

app.listen(5000); 

[END QUOTE]

Mặc dù tôi làm điều đó, như cuốn sách gợi ý, theo cách ngắn gọn hơn như thế này:

var connect = require('connect'); 
var serveStatic = require('serve-static'); 

connect().use(
    serveStatic("../angularjs") 
).listen(5000); 
+4

Điều này giải quyết được vấn đề của tôi với cảm ơn cuốn sách chuyên nghiệp! – rfresia

+1

Cảm ơn điều đó cũng đã giúp tôi giải quyết vấn đề của tôi. Ngẫu nhiên tôi đang trải qua cuốn sách ProAngularJS cố gắng để có được nó thiết lập trên MacBookPro của tôi và tôi đã kết thúc cấu trúc thư mục của tôi là "Apress/angularjs", nơi server.js nằm trong thư mục "Apress"; trong trường hợp đó, đường dẫn trong mã server.js sẽ là serveStatic ("angularjs"). Một khi tôi đã làm điều đó, bài kiểm tra đơn giản trong Chương 1 của cuốn sách Apress đã thành công và bây giờ tôi đang phục vụ thành công trang thử nghiệm. Cảm ơn bạn một lần nữa @Serj cho bài đăng của bạn. –

+1

cảm ơn và + cho gợi ý về cuốn sách Apress – zencv

1

Bạn cũng có thể muốn thử st, một module nút để phục vụ các tập tin tĩnh. Thiết lập là tầm thường.

npm install connect 

npm install st 

Và dưới đây là cách tập tin máy chủ dev.js của tôi trông giống như:

var connect = require('connect'); 
var http = require('http'); 
var st = require('st'); 

var app = connect() 
    .use(st('app/dev')); 

http.createServer(app).listen(8000); 

hoặc (với bộ nhớ cache bị vô hiệu hóa):

var connect = require('connect'); 
var http = require('http'); 
var st = require('st'); 

var app = connect(); 

var mount = st({ 
    path: 'app/dev', 
    cache: false 
}); 

http.createServer(function (req, res) { 
    if (mount(req, res)) return; 
}).listen(8000); 

app.use(mount); 
0

Cách đơn giản nhất để phục vụ các tập tin tĩnh là sử dụng "harp". Nó có thể được tìm thấy ở đây. Bạn có thể phục vụ các tệp của mình từ vị trí bạn muốn qua nút là:

var harp = require("harp") 
harp.server(projectPath [,args] [,callback]) 

Hy vọng điều này sẽ hữu ích.

2

Đã xảy ra sự cố tương tự. Nó đã được giải quyết như mô tả ở trên.

Trong index.js tôi

var port = 1338, 
express = require('express'), 
app = express().use(express.static(__dirname + '/')), 
http = require('http').Server(app), 
io = require('socket.io')(http); 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

io.on('connection', function(socket){ 
    console.log('a user connected'); 
}); 

http.listen(port, function(){ 
    console.log("Node server listening on port " + port); 
}); 

và trong index.html của tôi

<!doctype html> 
<html> 
    <head> 
     <title> 
      My page 
     </title> 
    </head> 
    <body> 
     <script src = "lib/socket.io.js"></script> 
     <script src = "lib/three.js"></script> 
     <script> 
      var socket = io(); 
     </script> 
    </body> 
</html> 

các three.js chỉ ở đó để thử nghiệm con đường. Điều này sẽ đặt tất cả các tệp con để bắt đầu tại thư mục gốc của ứng dụng của bạn. Ngoài ra socket.io.js có thể được gọi tự động bằng cách sử dụng <script src = "/socket.io/socket.io.js"> thông qua một số ma thuật tối (vì có thể chất là một node_modules và thư mục lib ở giữa).

10

Bạn sẽ thấy thông báo Cannot GET / nếu bạn không chỉ định trang nào bạn đang cố gắng nhận, nói cách khác nếu URL của bạn giống như http://localhost:8180. Đảm bảo bạn nhập tên trang, ví dụ: http://localhost:8180/index.html.

+0

yep ... Nó đã xảy ra với tôi. –

+0

Cũng có hành vi tương tự nếu bạn có đường dẫn sai, ví dụ như một tệp tĩnh – Mick

+0

Tôi nghĩ giải pháp này là những gì chủ yếu sẽ làm việc cho những người sử dụng express.js – lasec0203

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