我正在尝试使用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
,但是当我尝试在浏览器上查看该页面时,我得到了这个回复来自节点:
无法获取/
我做错了什么以及如何纠正它?
答案 0 :(得分:25)
你可能在这里,因为你正在阅读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);
[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中间件文档以获取更多信息。