mongodb - Socket.io,Mongodb 将未定义返回到前端
问题描述
我想将 socekt.io 用于我正在构建的新项目。我正在使用 socket.io 作为登录组件,并且将来会使用 socket.io 来更新诸如聊天应用程序之类的页面。我也在使用 mongoose 来处理我的 mongodb 连接。我正在输入用户名,并将密码返回到我的前端以进行 bcryptjscompareSync
哈希处理。我遇到的问题是返回到前端的任何内容都是未定义的。当我打印出返回到前端的内容时,它会打印出我正在寻找的值。后端发出一些东西,前端接收一些东西之间发生了一些事情,但我不知道它到底是什么。这是我的后端代码:
const express = require('express')
const socket = require('socket.io');
const http = require('http');
const router = require('./router');
const mongoose = require('mongoose');
let Player = require('../models/player.model');
require('dotenv').config();
const PORT = process.env.PORT || 5000;
const app = express();
const server = http.createServer(app);
const uri = process.env.ATLAS_URI;
mongoose.connect(uri, {useNewUrlParser: true, useCreateIndex: true,
useUnifiedTopology: true });
const connection = mongoose.connection;
connection.once('open',() => {
console.log('MongoDB database connection established successfully')
});
const io = socket(server);
io.on('connection', (socket) => {
console.log('We have a new connection');
socket.on('login', ({ username }, callback) => {
console.log(username);
Player.find({"username": username}, function (err, player) {
if(err) {
console.log("there has been an error"), {player: null}
}
socket.emit('id', { password: player[0]['password'].toString(), id : player[0]['_id']})
}) })})
app.use(router);
server.listen(PORT, () => console.log('Server is working'))
这是我的前端代码:
const ENDPOINT = 'localhost:5000';
async function submitAccount (e) {
e.preventDefault();
socket.emit('login', { username });
socket.on("id", (response) => {
setPassword2(String(response['password']));
id = response['id']; console.log(id);
console.log(password2)
});
try {
if (bcrypt.compareSync(password, password2) == true) {
props.setCookie("id", id);
setAccess(true);
access2 = true;
console.log(access2)
console.log('works')
}
else {
setErrorType('Invalid Password')
setErrorMsg('There is an issue with your password. Please try again')
setOpenModal(true)
console.log(password);
console.log(password2);
}
}
catch {
setErrorType('Invalid Username')
setErrorMsg('This username does not exist. Please try another')
setOpenModal(true)
}
谢谢您的帮助!
解决方案
当您执行 socket.on 时,它应该包括您希望通过 socket.io 输出更改的整个语句。见下文:
异步函数 submitAccount (e) {
e.preventDefault();
socket.emit('login', { username });
socket.on("id", (response) => {
setPassword2(String(response['password']));
id = response['id']; console.log(id);
console.log(password2)
if (password2 != undefined) {
try {
if (bcrypt.compareSync(password, password2) == true) {
props.setCookie("id", id);
setAccess(true);
access2 = true;
console.log(access2)
console.log('works')
}
}
推荐阅读
- browser-extension - Chrome 扩展 MV3 服务工作者持久数据
- android - 在android中更改应用程序状态栏白色和状态栏黑色的正确方法是什么?
- jmeter - 使用 jmeter 进行性能测试交叉检查与 Web 数据的响应不匹配
- excel - 将多张工作表复制并粘贴到一张工作表
- bash - weblogic中的认证更新自动化
- python-3.x - 如何将系列中的数据添加到python中的列表中
- javascript - 错误:值未定义,应为 React Native 动画图表库中的对象
- python - Python 3:查找和删除包含重复文件的文件夹;保留包含大多数文件的文件夹
- python - Plotly:使用下拉菜单选择要显示的 df
- webdav - 保存文档时出错。错误:webDav 上传失败:需要登录