У меня есть простое приложение для аутентификации в Instagram. После того, как я аутентифицируюсь в Instagram и получаю профиль пользователя, я хотел бы отправить имя пользователя со стороны сервера на сторону клиента activjs. Я пытался использовать сокет IO, но не могу заставить его работать.
Клиентская сторона
componentDidMount() {
const { socket, provider } = this.props
console.log('component did mount')
socket.on(provider, user => { //provider is a string e.g 'instagram'
//receives data and update state.
this.setState({user})
})
}
startAuth() { //onclick function that opens up new window for auth
const {provider} = this.props
const width = 600, height = 600
const left = (window.innerWidth / 2) - (width / 2)
const top = (window.innerHeight / 2) - (height / 2)
const url = `https://localhost:5000/${provider}`
return window.open(url, '',
`toolbar=no, location=no, directories=no, status=no, menubar=no,
scrollbars=no, resizable=no, copyhistory=no, width=${width},
height=${height}, top=${top}, left=${left}`
)
}
Серверная сторона
//After successful authentication redirect here with username and provider as
//query string. Here I want to emit to my component and update component's state
app.get('/success', (req, res) => {
var provider = req.query.provider
var username = req.query.username
io.emit(provider, username); //this doesn't work
res.send('Auth to ' + provider + ' successful by ' + username)
})
Что я должен сделать, чтобы отправленное событие на стороне сервера было поймано внутренним компонентом componentDidMount ()? Я не получил никаких сообщений об ошибках вообще. Я даже не уверен, было ли запущено событие в / success или нет.
Сокетное соединение работает нормально, я сделал следующий код ниже, и оно отлично работает.
io.on('connection', (client) => {
client.on('subscribeToTimer', (interval) => {
console.log('client is subscribing to timer with interval', interval);
setInterval(() => {
client.emit('timer', new Date());
}, interval);
})
})