socket.io를 사용하려고합니다.하지만 서버에서 https를 실행하면 socket.io가 작동하지 않습니다.Express + handlebars의 Socket.io가 https에서 작동하지 않습니다
내 app.js
let express = require('express');
let path = require('path');
let favicon = require('serve-favicon');
let logger = require('morgan');
let cookieParser = require('cookie-parser');
let bodyParser = require('body-parser');
let index = require('./routes/index');
let users = require('./routes/users');
let dashboard = require('./routes/dashboard');
let app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
// uncomment after placing your favicon in /public
app.use(favicon(path.join(__dirname, 'public/images', 'chatbotico.png')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(methodOverride('X-HTTP-Method-Override'));
app.use(session({secret: 'supernova', saveUninitialized: true, resave: true}));
app.use(passport.initialize());
app.use(passport.session());
// Session-persisted message middleware
app.use(function(req, res, next){
let err = req.session.error,
msg = req.session.notice,
success = req.session.success;
delete req.session.error;
delete req.session.success;
delete req.session.notice;
if (err) res.locals.error = err;
if (msg) res.locals.notice = msg;
if (success) res.locals.success = success;
next();
});
app.use('/', index);
app.use('/users', users);
app.use('/users/dashboard', dashboard);
// realtime chatbot
let socket = require('./config/sock');
// Socket connection
socket.conn();
socket.fromClient();
// catch 404 and forward to error handler
app.use(function(req, res, next) {
let err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
그래서 대신 app.js에 socket.io를 사용하여, 나는이 응용 프로그램에서 호출 모든 소켓 구성을 보유하고있어 함수를 만든
./config/sock 내 클라이언트 측에서 그래서
let app = require('express')();
let https = require('https');
let fs = require('fs');
let options = {
key: fs.readFileSync('./server.key'),
cert: fs.readFileSync('./server.crt'),
requestCert: false,
rejectUnauthorized: false
};
let server = https.createServer(options, app);
let io = require('socket.io')(server);
io.set("transports", ["xhr-polling","websocket","polling", "htmlfile"]);
let conn = function() {
server.listen(8080, function(){
});
app.get('/', function (req, res) {
res.set('Content-Type', 'text/xml; charset=utf-8');
res.sendfile(__dirname + '/index.html');
});
};
let fromClient = function() {
io.on('connection', function (socket) {
socket.on('fromClient', function (data) {
console.log(data);
});
});
});
};
module.exports = {conn,fromClient};
, 내가 수입 socket.io의 J를했습니다 핸들에들, 내가 convo.js
을에 서버 측과 연결을 시도이 수입에<html>
[...]
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
<script src="../javascripts/convo.js"></script>
[...]
<html>
./routes/dashboard
./views/dashboard/dashboard.hbs에 routered
./public/convo.js
let socket = io.connect('https://localhost:8080', { secure: true, reconnect: true, requestCert: false, rejectUnauthorized: false });
socket.emit('fromClient', { 'client' : 'some value'});
내 문제는 내가 해봤입니다 그리고 모든 것이 내 브라우저가 자체 서명 된 인증서로 이러한 https 연결을 허용하게하십시오. 그리고 그것을 통과시키는 법을 모르겠습니다.
localhost:8080 uses an invalid security certificate.
The certificate is not trusted because it is self-signed.
The certificate is not valid for the name localhost. Error code:
SEC_ERROR_UNKNOWN_ISSUER
누군가 내게 빛을 줄 수 있습니까? 이것은 제품이 아니며 대학 프로젝트이므로 인증서를 구입하고 싶지 않습니다.
감사합니다. O.Jones! , 나는 모든 요령을 확인하고 나는 당신에게 신속하게 답변을 줄 것이다 :) –