проблемы с подключением easyrtc при использовании middleware и / или ejs ...? - PullRequest
0 голосов
/ 28 августа 2018

У меня есть 2 различных сценария, настроенных в 2 отдельных папках со всеми соответствующими файлами. Оба сценария одинаковы и в основном выполняют «вход в систему» ​​для пользователя, запускают «сервер easyrtc», а затем разрешают доступ к веб-странице («chat_wip.html»), где пользователь может нажать кнопку, чтобы установить соединение easyrtc , Проблема в том, что один скрипт работает, а другой нет ... кнопка не устанавливает соединение easyrtc с нефункциональным скриптом. Основные отличия этого сценария (от действующего) заключаются в большем использовании промежуточного программного обеспечения и обслуживании страниц с использованием файлов .ejs, а не статических файлов .html.
Я отчаянно пытаюсь понять, в чем проблема, однако, очевидно, мне не повезло. Я задавался вопросом, есть ли какой-нибудь совет для узла / экспресса / ejs / middleware ...?

«Хороший» (функциональный) код таков:

////"Good" (functional) script:

var bodyParser = require('body-parser')
//Use Express module
var express = require('express');
var app = express();
var io = require("socket.io");  //web socket external module
var easyrtc = require("easyrtc");  //EasyRTC external module


//Statically serve files in these directories
app.use("/js", express.static(__dirname + '/easyrtc/js'));
app.use("/images", express.static(__dirname + '/easyrtc/images'));
app.use("/css", express.static(__dirname + '/easyrtc/css'));

//For my homepage  
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs')  //set the view engine to ejs

app.use("/css", express.static(__dirname + '/public/css'));
app.use("/img", express.static(__dirname + '/public/img'));

// Needed to parse form data 
app.use(bodyParser()); 

//global variables 
var loggedIn = false,
    password = 'password';  //change to something else
var title = 'This is a heading';
var message = 'Steve is NOT available';

//Temporary home page
app.get('/', function (req, res) {
    if (loggedIn == true) {
    res.render('index', {title: 'available', message: 'Steve is available...'});
    console.log("homepage -logged in");
    }
    else {
    res.render('index', {title: 'NOT available', message: 'Steve is NOT available'});
    console.log("homepage -not logged in");
    }
});

//Serve a static login page if not logged in already
app.get('/login', function (req, res) {
console.log('Login attempt');
    if (loggedIn == true) {
        res.sendfile(__dirname + '/easyrtc/chat_wip.html');    
    }
    else {
        res.sendfile(__dirname + '/public/login.html')
    }
});

//Respond to POST from login form
app.post('/login', function (req, res) {
console.log('post to /login');
    if (loggedIn == true) {
        res.send("Already logged in.");
    }
    else {
    console.log("Posted data:" + JSON.stringify(req.body));
    console.log("req.body.pword:" + req.body.pword);
    console.log("req.body.usr:" + req.body.usr);
        if (req.body.pword == password) {
            loggedIn = true;
            res.send("You are logged in.");
            console.log("Logged in");

            // Start EasyRTC server
            var easyrtcServer = easyrtc.listen(app, socketServer);

        }
        else{res.send("Incorrect password.")}
    }
});

//Initiate a video call
app.get('/video', function(req, res){
    if (loggedIn == true) {
        res.sendfile(__dirname + '/easyrtc/chat_wip.html');  
    }
    else {
        res.send("Steve is not available. Please try later.")
    }
});

// Start server on port 8080
var webServer = app.listen(8080);
console.log('Listening on port ' + 80);

// Start Socket.io so it attaches itself to Express server
var socketServer = io.listen(webServer);

Как уже упоминалось, этот код простой и сырой, однако он работает ... Я могу нажать кнопку в "chat_wip.html" и установить соединение easyrtc.
Вот нефункциональный код ... похожий на приведенный выше, однако с более промежуточным программным обеспечением и более интенсивным использованием .ejs вместо статических файлов:

////"Bad" (non-functional) script:

var connect = require('connect');
//File Uploads
var multer = require('multer');
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }
});
var upload = multer({ storage: storage });
var helmet = require('helmet');
var validator = require('express-validator');
var session = require('express-session');  
var cookieParser = require('cookie-parser');
var csurf = require('csurf');
var bodyParser = require('body-parser')
//Use Express module
var express = require('express');
var app = express();
var io = require("socket.io");  //web socket external module
var easyrtc = require("easyrtc");  //EasyRTC external module


app.use(helmet());

//Statically serve files in these directories
app.use("/js", express.static(__dirname + '/easyrtc/js'));
app.use("/images", express.static(__dirname + '/easyrtc/images'));
app.use("/css", express.static(__dirname + '/easyrtc/css'));

//For my homepage  
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs')  //set the view engine to ejs

app.use("/css", express.static(__dirname + '/public/css'));
app.use("/img", express.static(__dirname + '/public/img'));

// create application/json parser
var jsonParser = bodyParser.json()

// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })


app.use(session({
  secret: 'secret-key',
  key: 'secret-cookie',
  resave: false,
  saveUninitialized: false,
  cookie: { maxAge: 60000 }
}));

var csrfProtection = csurf({ cookie: true });  
//parse cookies...we need this because "cookie" is true in csrfProtection
app.use(cookieParser());

//global variables 
var loggedIn = false,
    password = 'password';  //change to something else
var title = 'This is a heading';
var message = 'Steve is NOT available';
var presenter = 'Username'
var passport = 'Password'    
var usr, pword, data, errors
var model_name 

//Temporary home page
app.get('/', csrfProtection, function (req, res) {

var site = req.hostname;  //example returns "localhost"
var splits = site.split(".");  //"split" on "periods"

console.log("site is: " + site);
console.log("first split is: " + splits[0]);
console.log("second split is: " + splits[1]);

if (loggedIn == true) {
res.render('index', {title: 'available', message: 'Steve is available...'});
console.log("homepage -logged in");
}
else {
console.log("homepage -not logged in");

  res.render('login', {
    presenter: 'username please',
    passport: 'password please', 
    errors: {},
    csrfToken: req.csrfToken()
  });

 }

});

//Serve a static login page if not logged in already
app.get('/login', csrfProtection, function (req, res) {
console.log('Login attempt');
    if (loggedIn == true) {
        res.sendfile(__dirname + '/easyrtc/chat_wip.html');  
    }
    else {

      res.render('login', {
        presenter: 'username please',
        passport: 'password please',
        errors: {},
        csrfToken: req.csrfToken()
      });

    }
});


//Respond to POST from login form
//POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, csrfProtection, function (req, res)    {    
  if (!req.body) return res.sendStatus(400)

    console.log("Posted data:" + JSON.stringify(req.body));
    console.log("req.body.pword:" + req.body.pword);
    console.log("req.body.usr:" + req.body.usr);

var usr_STR = String(req.body.usr)
var pass_STR = String(req.body.pword)
console.log("req.body.usr: " + req.body.usr + " req.body.pword: " + req.body.pword);
console.log("usr_STR: " + usr_STR + " pass_STR: " + pass_STR);

    if (loggedIn == true) {
        res.send("Already logged in.");
    }
    else {

        if (req.body.pword == password) {
            loggedIn = true;
            console.log("Logged in");

            // Start EasyRTC server
            var easyrtcServer = easyrtc.listen(app, socketServer);

            res.render('admin', { user_name: req.body.usr });

        }
        else {

            res.render('login', {
              presenter: 'username please',
              passport: 'password please',
              errors: {
                presenter: {
                msg: 'Your username does not look right'
                },
                passport: {
                msg: 'Your password does not look right'
                }
              },
              csrfToken: req.csrfToken()
            });

        }
    }

})

//Serve an administration page if logged in already
app.get('/admin', csrfProtection, function (req, res) {

    if (loggedIn == true) {
    console.log('Admin Serve');
//        res.send('welcome, ' + req.body.usr + ' to your administration page')
    }
    else {

      res.render('login', {
        presenter: 'username please',
        passport: 'password please',
        errors: {},
        csrfToken: req.csrfToken()
      });

    }
});

//Initiate a video call
app.get('/video', function(req, res){
    if (loggedIn == true) {
        res.sendfile(__dirname + '/easyrtc/chat_wip.html');  
    }
    else {
        res.send("Steve is not available. Please try later.")
    }
});



//Error Handling
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!')
});


// Start server on port 8080
var webServer = app.listen(8080);
console.log('Listening on port ' + 80);

// Start Socket.io so it attaches itself to Express server
var socketServer = io.listen(webServer);

Вот и все, в принципе ... любые идеи будут высоко оценены. Похоже, что использование .ejs вместо статического файла .html вызывает ошибку ... или, возможно, внедрение страницы "Admin" ... ??? Что бы это ни было ... это убивает меня. Заранее спасибо. С уважением.

...