我正在尝试学习java脚本。我正在考虑使用Express,stock.io和ejs制作一个基本的聊天应用程序。
我无法让它运行。
这是我的app.js
var express = require('express');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var path = require('path');
var ejs = require('ejs');
var app = express();
// view engine
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'viwes'));
app.get('/', function(req, res) {
res.render('index');
});
io.on('connection', function(socket) {
console.log('a user connected');
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
我的index.ejs
<!DOCTYPE html>
<html>
<head>
<title>ChatApp</title>
<link href="/css/style.css" rel="stylesheet" type="text/css" />
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
</script>
</head>
<body>
</body>
</html>
我的package.json
"dependencies": {
"express": "4.14.0" ,
"body-parser": "1.15.2" ,
"socket.io": "1.6.0",
"connect": "3.5.0",
"ejs": "2.5.2"
},
"engines": {
"node": "4.0.0"
},
"repository": {
"type": "git",
"url": "https://github.com/heroku/node-js-sample"
},
现在它只是在浏览器中说:
Cannot GET /
我认为这是一个路径问题,但我知道什么......
答案 0 :(得分:2)
您创建了两个不同的app
变量,用另一个覆盖了一个变量,部分应用正在使用一个,而另一部分正在使用另一个变量。改变:
var express = require('express');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var path = require('path');
var ejs = require('ejs');
var app = express(); // this is overwriting your app variable
来解决问题的这一部分:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var path = require('path');
var ejs = require('ejs');
因为您正在创建第二个app
对象并用它覆盖app
变量,所以您在app
对象上创建的路径根本没有连接到您的服务器。因此,您的实际服务器没有为其定义路由,似乎没有任何工作。
推荐的修补程序创建一个且只有一个app
对象,代码的所有部分都使用该app
个对象。
此外,似乎views
拼写错误:
path.join(__dirname, 'viwes')
然后,在您的浏览器中,确保您指定端口3000,因为这是您启动服务器的端口。
仅供参考,这不是一个实际的编程错误,但我个人认为使用http
作为服务器的变量名称是一个坏主意。 http
模块应该使用http
(您有时可能希望在应用中的其他位置使用该模块)。 require('http').Server(app);
创建一个服务器对象,以便为变量命名:
var server = require('http').Server(app);
甚至更好:
var server = require('http').createServer(app);
然后,稍后:
server.listen(...);