2016-11-23 48 views
0

我在學習java腳本。我正在考慮使用Express,stock.io和ejs製作一個基本的聊天應用程序。無法讓它運行,Node.js,express,socket.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" 
    }, 

鑽機HT現在它只是說,在瀏覽器中:

Cannot GET/

我認爲它是一個路徑問題,但我怎麼知道..

回答

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(...); 
+0

哇這就是快!謝謝,它有部分工作。現在它不能找到索引文件壽。 –

+0

@LinusKarlsson - ''views'拼寫錯誤'path.join(__ dirname,'viwes'));' – jfriend00

+0

哈哈謝謝!它現在有效! –