gpt4 book ai didi

javascript - 无法运行 Node.js、express、socket.io 和 ejs?

转载 作者:行者123 更新时间:2023-12-02 13:55:01 27 4
gpt4 key购买 nike

我正在尝试学习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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com