Передача данных из роутера в файл сервера node.js express - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь создать веб-приложение, используя node.js, и я хотел бы передать данные из моего маршрутизатора, файла, который обрабатывает форму, в файл моего сервера, который фактически будет отправлять события другому подключенному пользователю.

маршрутизатор. js

module.exports=function(app) {
    const express = require('express');
    const User = require("./public/classes/User");
    const router = express.Router();
    const {check, validationResult} = require('express-validator');
    const {matchedData} = require('express-validator/filter');

    var userlist = new Array();


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

    router.post('/enter', [
        check('username')
            .isLength({min: 1})
            .withMessage('Username is required').trim()   //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)

    });
    return router;


    //MOVE TO SUPPORT
    function find(name) {
        return 1;
    }

}

сервер. js

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



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('connect', onConnect);

function onConnect(socket) {
    var contents = fs.readFileSync("./public/rooms.json");
    let rooms = JSON.parse(contents);
    socket.emit('parse',rooms);
    socket.on('join',function (name, room) {
        console.log(name+" "+ room);
        socket.join(room);
        socket.user=name;
        socket.room=room;
    })
}



server.listen(3000, () => {
    console.log(`App running at http://localhost:3000`);
});

Я хотел бы передать обработанные данные моего почтового запроса на сервер, как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Если все, что вы хотите сделать, это отправить данные, обработанные в обработчике маршрута, клиенту (-ам), вам не нужно сначала отправлять их в файл server, вы можете отправить их из обработчика маршрута. Для этого вам нужно будет сохранить ссылку на объект сокета, чтобы вы могли использовать его в других местах, кроме функции обратного вызова соединения сокета.

Обновите вашу функцию onConnect в server.js, чтобы сохранить ссылку на сокет в локальных приложениях:

function onConnect(socket) {
  // Store the socket object in app locals
  app.locals.socket = socket;
  var contents = fs.readFileSync("./public/rooms.json");
  let rooms = JSON.parse(contents);
  socket.emit('parse',rooms);
  socket.on('join',function (name, room) {
      console.log(name+" "+ room);
      socket.join(room);
      socket.user=name;
      socket.room=room;
  })
}

А в обработчике маршрута вы можете отправлять данные в любое время:

router.post('/enter', [
  check('username')
    .isLength({ min: 1 })
    .withMessage('Username is required').trim()   //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)
  // Emit your data here:
  app.locals.socket.emit("data", data);
});
0 голосов
/ 14 февраля 2020

Может быть, вы забыли экспортировать маршруты из маршрута. js. Используйте module.export = route; в маршруте. js файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...