Node.js上的Connect“无法获取/”

时间:2012-03-09 00:52:01

标签: http node.js connect

我正在尝试使用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);

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

  

无法获取/

我做错了什么以及如何纠正它?

10 个答案:

答案 0 :(得分:25)

你可能在这里,因为你正在阅读Apress PRO AngularJS书......

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

[END QUOTE]

虽然我这样做,正如书中建议的那样,以这样一种更简洁的方式:

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

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

答案 1 :(得分:17)

如果您没有指定您尝试获取的页面,则会看到Cannot GET /消息,换句话说,如果您的网址类似{{1} }}。确保输入页面名称,例如http://localhost:8180

答案 2 :(得分:15)

此代码应该有效:

var connect = require("connect");

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

app.listen(8180);

同样在不推荐使用connect 2.0 .createServer()方法。改为使用connect()。

var connect = require("connect");

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

app.listen(8180);

答案 3 :(得分: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>

三个.js就在那里进行路径测试。这会将所有子文件设置为从应用程序的根目录开始。 socket.io.js也可以通过一些黑魔法使用<script src = "/socket.io/socket.io.js">自动调用(因为物理上有一个node_modules和lib目录)。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

您可能还想尝试 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);

或(禁用缓存):

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

答案 6 :(得分:1)

如果您在命令行中执行“ ng build”,通常可以确定“无法获取/”的解决方案。您通常会发现其中一个“导入”没有正确的路径。

答案 7 :(得分:0)

提供静态文件的最简单方法是使用&#34; harp&#34;。在这里能找到它。您可以通过节点从您想要的位置提供文件:

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

希望这有帮助。

答案 8 :(得分:0)

如果restart app.get工作正常,则可能需要not。按ctl+c,然后按restart node app

答案 9 :(得分:-2)

您通常希望渲染这样的模板:

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

但是,您也可以提供静态内容 - 使用:

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

现在项目的/ public目录中的所有内容都将作为静态内容传递到您网站的根目录,例如如果你将default.htm放在公共文件夹中,可以访问/default.htm

查看express API和Connect Static中间件文档以获取更多信息。