在Express.JS Genereted项目中使用Socket.io的最佳方法是什么

时间:2018-07-08 01:41:52

标签: javascript node.js express socket.io

当我刚接触Express时,我想知道哪种方法可以与Generator一起安装并在其中使用Socket.io。

对于许多教程,他们展示了如何在手动安装的Express项目中安装socket.io的方法。

有人可以为此提出更好的解决方案吗?!

1 个答案:

答案 0 :(得分:0)

您可以通过运行npm install express --save并遵循说明来生成NodeJS(Express 4.x)新项目。 之后,您将在Project目录中拥有不同的文件夹:

  • bin:www(项目的基本配置文件)位于哪里
  • public:存储/ images,/ javascritps和/ stylesheets的位置
  • routes:存储路由文件的位置(开头是index.js和users.js)
  • 视图:我们在其中找到要使用的.html文件(开头是index.html,layout.html和error.html)

我们还有2个文件:

  • app.js
  • package.json

完成此安装后,您当然需要运行npm install来安装基本依赖项。

要在项目中运行socket.io npm i -s socket.io

在完成此安装后,我们进行必要的更改以使Socket.io在我们的项目中正常工作。要更改的文件是: / bin / www /views/layout.html /routes/users.js app.js

  • / bin / www

替换此行

var app = require('../app');

与此

var app = require('../app').app;

并替换这个

var server = http.createServer(app);

与此

var server = require('../app').server;
  • /views/layout.html

替换此代码

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <link rel="stylesheet" href="/stylesheets/style.css">
  </head>
  <body>
  </body>
</html>

与此一起

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <link rel="stylesheet" href="/stylesheets/style.css">
  </head>
  <body>
    <script src="/socket.io/socket.io.js"></script>
    <script>
      var socket = io('//localhost:3000');
      socket.on('socketToMe', function (data) {
          console.log(data);
      });
    </script>
  </body>
</html>
  • app.js

就在这行下方

var app = express();

添加此

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

并在此行之前

app.use(logger('dev'));

添加此中间件

app.use(function (req, res, next) {
    res.io = io;
    next();
});

所有这些都是必需的,如果做得好,您就可以开始使用。

出于测试目的,您可以像这样修改 /routes/users.js

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function (req, res, next) {
    res.io.emit("socketToMe", "Users"); // This line was added to test Socket.io in action
    res.send('respond with a resource');
});

module.exports = router;

,然后运行npm start浏览至http://localhost:3000/users,您应该在浏览器控制台中看到Users

仅此而已!