2016-11-23 3 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" 
    }, 

Рог ХТ теперь просто говорят в браузере:

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, так как это порт, который вы начинаете ваш сервер включен.


FYI, это не фактическая ошибка программирования, но я лично считаю, что это плохая идея использовать http как имя переменной для вашего сервера. http следует использовать для модуля http (который вы можете иногда использовать в другом месте вашего приложения).require('http').Server(app); создает объект сервера, так это то, что вы должны назвать переменную:

var server = require('http').Server(app); 

Или еще лучше:

var server = require('http').createServer(app); 

Затем, позже:

server.listen(...); 
+0

Wow Thats быстро! Спасибо, он работал частично. теперь он не может найти файл индекса tho. –

+0

@LinusKarlsson - 'views' ошибочно написано в' path.join (__ dirname, 'viwes')); ' – jfriend00

+0

haha ​​Спасибо! он работает сейчас! –

Смежные вопросы