私はsocket.ioで作業しようとしていますが、サーバーでhttpsを実行するとsocket.ioが動作しません。Express +ハンドルバーの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を使用して、私はそれがアプリから呼び出されると、すべてのソケット構成を保持しているだ機能を作成しました
だから私のクライアント側から、私は輸入socket.io jを./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};
をしましたハンドルバー上のsが、私はconvo.js
にサーバ側で接続しよう./routes/dashboard./views/dashboard/dashboard.hbsこのインポートと
<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>
に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! 、私はすべてのヒントをチェックし、私はあなたに迅速に応答を与える:) –