[英]Cant get it to run, Node.js, express, socket.io and ejs?
我正在嘗試學習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(...);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.