2012-03-09 48 views
32

我试图启动服务使用connect这样一些静态的网页:“不能GET /”与连接上的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); 

所以我在/public目录添加了一个简单index.html在同目录作为app.js文件,但是当我尝试查看我的浏览器的页面我得到这个节点响应:

不能得到/

我在做什么错了,我该如何纠正它?

回答

10

此代码应该工作:

var connect = require("connect"); 

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

app.listen(8180); 

同样在连接2.0 .createServer()方法弃用。改用connect()。

var connect = require("connect"); 

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

app.listen(8180); 
+7

啊,非常感谢。所有这些旧的node.js文章都让我对这些被弃用的东西感到困惑。 – 2012-03-09 01:42:32

+0

我已经尝试了这两种方法,他们都表示未定义不是函数。在第一个示例中,这告诉我.createServer()不是函数,而在第二个示例中,__dirname无效。 – 2015-10-16 14:16:21

-1

您通常要渲染的模板是这样的:

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

然而,你也可以提供静态内容 - 这样做的使用:

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

现在一切都在/ public目录您的项目将作为您网站根目录的静态内容提供,例如如果你把的default.htm公共文件夹,如果将可通过访问/default.htm

以通过express API一看,连接静态中间件文档的更多信息。

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

创建一个angularjs目录。在里面创建index.html文件。 – prashantsahni 2014-07-04 10:57:15

+0

虽然这个代码块可能会回答这个问题,但最好能提供一些解释为什么它会这样做。 – PlasmaHH 2014-07-04 11:14:44

+0

我正在使用serveStatic模块,它可以完成这项工作。 – prashantsahni 2014-07-04 11:16:27

24

您可以在这里是因为你正在阅读的书Apress PRO AngularJS ...

正如在评论由KnarfaLingus描述this question

[START QUOTE]

的连接模块已被重新组织。这样做:

npm install connect 

npm install serve-static 

之后您server.js可以写为:

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

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

app.listen(5000); 

[引用结束]

虽然我这样做,因为书以这种更简洁的方式建议:

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

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

这解决了我的问题与亲角书,谢谢! – rfresia 2014-07-28 16:58:37

+1

谢谢你也帮我解决了我的问题。顺便说一下,我正在通过ProAngularJS书试图让它在我的MacBookPro上设置,并最终将我的目录构建为“Apress/angularjs”,其中server.js驻留在“Apress”目录中;在这种情况下,server.js代码中的路径将是serveStatic(“angularjs”)。一旦我这样做了,Apress书第1章中的简单测试就成功了,现在我已经成功地提供了测试页面。再次感谢@Serj对你的帖子。 – 2014-08-10 07:05:55

+1

谢谢,并提供关于Apress书的提示 – zencv 2015-05-24 21:19:03

1

你也可以试试ST,提供静态文件节点模块。安装很简单。

npm install connect 

npm install st 

这是我的服务器dev.js文件的样子:

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

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

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

或(与缓存禁用):

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

为静态文件最简单的方法是使用“竖琴”。在这里能找到它。你可以从你想要的位置通过节点提供你的文件:

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

希望这会有所帮助。

2

有同样的问题。如上所述解决了问题。

在我index.js

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); 
}); 

,并在我的index.html

<!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> 

的three.js所只是在那里路径测试。这会将所有子文件设置为在应用程序的根目录下启动。另外,socket.io.js可以使用<script src = "/socket.io/socket.io.js">通过一些黑暗的魔法自动调用(因为物理上有一个node_modules和lib目录)。

10

如果您未指定要获取的是哪个网页,换句话说,如果您的网址类似http://localhost:8180,您将看到消息Cannot GET /。确保您输入页面名称,例如http://localhost:8180/index.html

+0

是的......它只是发生在我身上。 – 2015-11-11 19:53:21

+0

同样的行为,如果你有错误的路径,例如对一个静态文件 – Mick 2017-03-10 10:02:08

+0

我认为这个解决方案是什么将主要为那些使用express.js – lasec0203 2017-11-11 03:23:00