2016-11-23 3 views
0

자바 스크립트를 배우려고합니다. 나는 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/

내가 그 경로 문제를하지만 내가 알고 생각 ... 당신은 두 개의 서로 다른 app 변수를 만든

답변

2

, 다른과의 부분을 덮어 쓰기하여 앱은 하나를 사용하고 일부는 다른 것을 사용 중입니다. 이에서 변경이에

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 

을 문제의 그 부분 수정 :

두 번째 app 객체를 생성하고 그것으로 당신의 app 변수를 덮어 있었기 때문에
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 개체를 사용합니다. 또한


, views가에서 맞춤법이 틀린 것 같습니다 : 그건 당신이 시작하는 포트이기 때문에 당신이 포트 3000를 지정하고 있는지 확인, 브라우저,

path.join(__dirname, 'viwes') 

그런 다음 서버가 켜져 있습니다.


는 참고로,이 실제 프로그래밍 오류가 아닙니다 그러나 나는 개인적으로 서버의 변수 이름으로 http를 사용하는 것이 나쁜 아이디어라고 생각합니다. http 모듈에 사용해야합니다 (앱의 다른 곳에서 사용하기를 원할 수도 있음).나중에, 다음

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

:

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

또는 더 나은 : 그건 당신이 변수 이름을해야하는지, 그래서 require('http').Server(app);는 서버 객체를 생성

server.listen(...); 
+0

와우 그게 빨리! 고마워, 그것은 부분적으로 효과가 있었다. 이제 색인 파일을 찾을 수 없습니다. –

+0

@LinusKarlsson -'views'의 철자가'path.join (__ dirname, 'viwes'));' – jfriend00

+0

haha ​​Thanks! 이제 작동합니다! –

관련 문제