簡體   English   中英

不能讓它運行,Node.js,express,socket.io和ejs?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM