2012-06-27 2 views
4

이것은 나를 미치게 만든다 ... 내가 Express + Socket.io의 작업 버전을 가지고있는 동안, 나는 out-of- 상자 NPM은 새 프로젝트 폴더에 설치됩니다. 아무도 제가 누락 된 것을 지적 해 줄 수 있습니까? 그때, 내 프로젝트 디렉토리 (pwd)에 node_modules 폴더를 생성 할Express + socket.io : socket.io 클라이언트 스크립트는 404

: 여기 내 프로세스의

npm install express 
npm install socket.io 

두 명령을 실행 예상대로 내 프로젝트의 node_modules 폴더에 패키지를 저장합니다.

var express = require('express'), 
    server = express.createServer().use(express.static(__dirname+'./public')).listen(8080), 
    io = require('socket.io').listen(server); 

public 폴더 내 응용 프로그램에 대한 고정 자산을 포함 : 이제 다음 내 서버를 설정합니다.

<script src="/socket.io/socket.io.js"></script> 

마지막으로, 나는 내 서버 스크립트를 실행하고 웹 브라우저에서 응용 프로그램으로 이동 : 내 공공 인덱스 HTML 페이지의 스크립트 태그를 포함합니다. 내 정적 공개 파일은 모두 제대로 제공되지만 /socket.io/socket.io.js에 404가 표시됩니다. 이제 다른 이전 프로젝트의 express 패키지를 바꿔서이 전체 시스템을 사용할 수 있습니다. 어떻게 든 패키지 인스턴스가 다르게 구성되어 있지만이를 재현하는 방법을 알 수는 없습니다. npm install -d을 실행해도 도움이되지 않지만 (npm install -d을 실행하는 동안 특정 pwd이 필요합니까?) Express 웹 사이트에서 종속성 설치에 대해 언급합니다. NPM으로 설치 한 후 새 Express 인스턴스를 구성하는 데있어 중요한 것을 놓치고 있어야한다는 것을 알았습니다.

모든 통찰력에 감사드립니다!

+1

express 및 socket.io의 어떤 버전을 설치하고 있습니까? 방금 진행 한 단계를 거쳤습니다. 정적 자산과 socket.io.js가 잘 작동합니다. –

+1

클라이언트 측 socket.io.js가 동적으로 생성되므로 명시 적 정적 서버와 관련이 없어야합니다. 실패한 경로에 대한 자세한 정보를 얻을 수 있습니까? http : // localhost : 8000/socket.io/socket.io.js 또는 http : // localhost : 8000/socket.io/(실행중인 포트 번호로 8000을 대체하면 어떻게되는지 확인하십시오. 귀하의 애플 리케이션에) – Sdedelbrock

+0

디모데 디토 ... 내 컴퓨터에서 작동합니다. Windows에서 다음과 같이 정적 파일의 경로를 변경해야했지만 다음과 같이 __dirname + '/ public'(점을 제거함) –

답변

6

제 예제는 실제로 내 코드의 약자 였으므로 예제 코드가 실제로 작동합니다. 문제가 내 실제 코드는 다음처럼, 좀 더 복잡했다 :

var server = express.createServer(); 

server 
    .use(server.router) 
    .use(express.static(__dirname+'/../public')) 
    .get('/api', function(req, res) { 
     res.write('API'); 
    }); 

server.listen(8080); 

var io = require('socket.io').listen(server); 

내가 수행하여 위의 코드를 고정 다음

server = server.listen(8080); 

은 분명히 listen 명령은 몇 가지 추가 기능을 서버 개체를 래핑 . listen이 서버 변수에 대한 최종 리턴 체인에 연결되어 있기 때문에 실제로 원래 게시 된 약식 예제가 작동합니다. 재미있는 작은 뉘앙스.

+0

나는이 문제에 대해 막 실행했습니다. 감사합니다 ... –

+0

도움이 되셨습니다. 이것은 내가 아직도 약간 신비화 된 정말 이상한 문제입니다. 누구든지 .listen() 함수가 실제로 무엇을 반환하는지 알고 있습니까? 나는 연쇄를 용이하게하기 위해 호출 된 http.Server 객체에 대한 참조를 반환한다고 가정합니다. 반환하는 객체는 http.Server 객체와 비슷한 메소드를 가지고있는 것처럼 보이지만 동일하지는 않습니다.안타깝게도 문서화는 반환의 성격을 지정하지 않습니다. – bigmac