【发布时间】:2019-11-21 14:58:33
【问题描述】:
我有一个中间件来通过 jwt 验证我的套接字 但我在其他文件夹中制作新事件时遇到问题 不要在我的 app.js 中获取所有内容
我这样做是为了验证我的套接字:
let io = require('socket.io')(server);
app.set("io", io);
io.use(verify.passportJwtAuth);
io.on('connection', function(socket) {
console.log('Authentication passed!');
// now you can access user info through socket.request.user
// socket.request.user.logged_in will be set to true if the user was authenticated
socket.emit('success', {
message: 'success logged in!'
});
});
中:
async passportJwtAuth(socket,next) {
const secret = config.jwt.secret;
const token = socket.handshake.query.token;
jwt.verify(token, secret, function(err, decoded) {
if(err) {
return next(err);
}
console.log("sucess");
return next();
});
}
我尝试创建一个新的event:
const socketRouter = require('./routes/socket');
io.use(verify.passportJwtAuth);
io.on('connection', function(socket) {
console.log('Authentication passed!');
// now you can access user info through socket.request.user
// socket.request.user.logged_in will be set to true if the user was authenticated
socket.emit('success', {
message: 'success logged in!'
});
});
socketRouter.configuration();
我的socketRouter.configuration:
const socketController = require ('../controllers/SocketController');
const verify = require('../auth/index');
const socket = require('socket.io');
module.exports = {
configuration: () => {
socket.on ('message', (message) => {
socket.emit ('myevent', {message: 'Ok, You are signed in'});
console.log (message);
console.log (`Socket $ {socket.id}`)
});
}
}
错误:
C:\Users\SpiriT\Documents\Projetos\FtcJokenPo\back\src\routes\socket.js:6
socket.on ('message', (message) => {
^
TypeError: socket.on is not a function
at Object.configuration (C:\Users\SpiriT\Documents\Projetos\FtcJokenPo\back\src\routes\socket.js:6:14)
at Object.<anonymous> (C:\Users\SpiriT\Documents\Projetos\FtcJokenPo\back\src\app.js:36:14)
我不想将所有套接字逻辑都留在我的 app.js 中
同样,当我打开服务器时,我已经调用了这个模块(我希望它只在我在前端使用 socket.on 时调用)
有人可以帮帮我吗?
我的前端:
verify = () => {
let socket = null;
var token = 312312312;
socket = io('http://localhost:8080', {
query: {token: token}
});
socket.on('error', function(err) {
console.error(err);
});
// Connection succeeded
socket.on('success', function(data) {
console.log(data.message);
})
}
【问题讨论】:
-
您必须将您创建的
io实例共享给任何其他希望使用它的文件。