我正在尝试学习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 /
我认为这是一个路径问题,但我知道什么..
最佳答案
您创建了两个不同的 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(...);
关于javascript - 无法运行 Node.js、express、socket.io 和 ejs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40756598/