在Node.js上连接“无法GET /”

我试图开始使用像这样connect一些静态网页:

 var connect = require("connect"); var nowjs = require("now"); var io = require("socket.io"); var app = connect.createServer( connect.static(__dirname + '/public') ); app.listen(8180); 

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

不能获取 /

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

这个代码应该工作:

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

您可能在这里,因为您正在阅读Apress PRO AngularJS书籍…

正如KnarfaLingus对这个问题的评论所描述的KnarfaLingus

[开始报价]

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

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

[结束语]

虽然我是这样做的,正如本书所build议的那样:

 var connect = require('connect'); var serveStatic = require('serve-static'); connect().use( serveStatic("../angularjs") ).listen(5000); 

如果您不指定要获取的页面,换句话说,如果您的URL类似于http://localhost:8180您将看到消息Cannot GET / 。 确保input页面名称,例如http://localhost:8180/index.html

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

在我的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只是在那里进行pathtesting。 这将设置所有的子文件在你的应用程序的根目录下启动。 另外,可以使用<script src = "/socket.io/socket.io.js">自动调用socket.io.js,因为它有一个物理上的node_modules和lib目录。

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

你也可以试试st ,一个节点模块来提供静态文件。 安装是微不足道的。

 npm install connect npm install st 

以下是我的server-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); 

或(禁用caching):

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

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

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

希望这可以帮助。

你通常想渲染这样的模板:

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

不过,你也可以提供静态内容 – 这样做使用:

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

现在,项目的/ public目录中的所有内容都将作为站点根目录中的静态内容提供,例如,如果将default.htm放置在公用文件夹中(如果可以访问/default.htm

通过快速API和连接静态中间件文档了解更多信息。