Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将socket.io与express router一起使用_Javascript_Node.js_Express_Socket.io - Fatal编程技术网

Javascript 将socket.io与express router一起使用

Javascript 将socket.io与express router一起使用,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我是node.js的新手,我正在尝试构建一个webchat,到目前为止,我有一个server.js文件和一个router.js文件,其中应该包含我的所有路由。我没有使用快速生成器。我想使用socket.io,但在我当前的设置中它不起作用。 这是我的 server.js const path = require('path'); const express = require('express'); const layout = require('express-layout'); const a

我是node.js的新手,我正在尝试构建一个webchat,到目前为止,我有一个server.js文件和一个router.js文件,其中应该包含我的所有路由。我没有使用快速生成器。我想使用socket.io,但在我当前的设置中它不起作用。 这是我的

server.js

const path = require('path');
const express = require('express');
const layout = require('express-layout');
const app = express();
const routes = require('./router');
const bodyParser = require('body-parser');
var server = require('http').createServer(app);
var io=require('socket.io')(server);


app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

const middleware = [
    layout(),
    express.static(path.join(__dirname, 'public')),
    bodyParser.urlencoded(),


];

app.use(middleware);

app.use('/', routes);

app.use((req, res, next) => {
    res.status(404).send("Sorry can't find that!");
});

app.use((err, req, res, next) => {
    console.error(err.stack);
    res.status(500).send('Something broke!');
});

io.on('connection',function (socket) {
    console.log('yo');
});




server.listen(3000, () => {
    console.log(`App running at http://localhost:3000`);
});
const express = require('express');
const router = express.Router();
const {check, validationResult}=require('express-validator');
const { matchedData } = require('express-validator/filter')
const app = express();


    router.get('/', (req, res) => {
        res.render('index', {
            data: {},
            errors: {}
        })
    });

    router.post('/enter', [
        check('username')
            .isLength({min: 1})
            .withMessage('Username is required')   //implement personalized check
    ], (req, res) => {
        const errors = validationResult(req);

        if (!errors.isEmpty()) {
            return res.render('index', {
                data: req.body,
                errors: errors.mapped()
            })
        }
        const data = matchedData(req)

    });



module.exports = router;
router.js

const path = require('path');
const express = require('express');
const layout = require('express-layout');
const app = express();
const routes = require('./router');
const bodyParser = require('body-parser');
var server = require('http').createServer(app);
var io=require('socket.io')(server);


app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

const middleware = [
    layout(),
    express.static(path.join(__dirname, 'public')),
    bodyParser.urlencoded(),


];

app.use(middleware);

app.use('/', routes);

app.use((req, res, next) => {
    res.status(404).send("Sorry can't find that!");
});

app.use((err, req, res, next) => {
    console.error(err.stack);
    res.status(500).send('Something broke!');
});

io.on('connection',function (socket) {
    console.log('yo');
});




server.listen(3000, () => {
    console.log(`App running at http://localhost:3000`);
});
const express = require('express');
const router = express.Router();
const {check, validationResult}=require('express-validator');
const { matchedData } = require('express-validator/filter')
const app = express();


    router.get('/', (req, res) => {
        res.render('index', {
            data: {},
            errors: {}
        })
    });

    router.post('/enter', [
        check('username')
            .isLength({min: 1})
            .withMessage('Username is required')   //implement personalized check
    ], (req, res) => {
        const errors = validationResult(req);

        if (!errors.isEmpty()) {
            return res.render('index', {
                data: req.body,
                errors: errors.mapped()
            })
        }
        const data = matchedData(req)

    });



module.exports = router;
它应该在控制台上记录“yo”,但它没有。我已经尝试将socket.io设置部分移动到router.js,它不会给出任何错误,但不会记录任何内容。另外,如果我在server.js上正确设置了socket.io,如何将其传递给router.js

编辑 有一个index.ejs文件,其中包含一些客户机代码,用于初始化与socket.io的连接

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Global.io</title>

    <link type="text/css" rel="stylesheet" href="/index.css">
    <script>
        var socket = io();


        socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
            console.log('yo client');
        });
    </script>
  <!--  <script src="/socket.io/socket.io.js"></script>
    <script src="https://code.jquery.com/jquery-1.11.1.js"></script>

    <script src="/scripts/client.js" defer></script> -->

</head>
<body>
<h1>Start debating about the change</h1>
<div id="wrapper">

    <form id="formElem" method="post" action="/enter" novalidate>
        <% if (errors.username) { %>
            <div class="error"><%= errors.username.msg %></div>
        <% } %>
        <input id='name' type="text" name="user" placeholder="User name" class=" <%= errors.username ? 'form-field-invalid' : ''%>">
        <select name="room" id="room">
        </select>
        <button type="submit" id="submit-b">Submit</button>
    </form>



</div>

</body>
</html>

Global.io
var socket=io();
on('connect',function(){//TIP:您可以避免侦听'connect',也可以直接侦听事件!
console.log('yo client');
});
开始讨论这个变化
提交
现在,它给出一个错误,表示io未定义。

您需要:

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


在尝试在网页中使用socket.io的脚本之前。该脚本加载socket.io库并定义
io
符号,以便您可以在加载库后使用它。

是否有启动socket.io连接的客户端socket.io代码?使用客户端代码编辑问题在尝试加载客户端socket.io库之前,不显示加载客户端socket.io库的脚本标记使用它。