【发布时间】:2021-05-07 06:24:46
【问题描述】:
我正在制作一个 API,可以记录使用该应用程序的用户的日志,到目前为止,我已经做到了,以便登录可以将用户名和房间发布到 API,但我无法制作它从 API 获取用户名,并在页面被重定向后将其显示在聊天中。
编辑:我应该为正在发生的事情添加一些细节......在我发布数据后我得到这个错误:没有指定默认引擎并且没有扩展名 提供。 后跟 **UnhandledPromiseRejectionWarning:未处理的承诺拒绝。 **
index.html 代码:
<body>
<img class="uao" src="/imagenes/UAO.svg">
<div class="containerLogo"><img src="/imagenes/logo.png" /></div>
<div class="join-container">
<main class="join-main">
<form name="form">
<div class="form-control">
<label for="username">Usuario</label>
<input type="text" name="username" id="username" placeholder="Ingrese su usuario..." required />
</div>
<div class="form-control">
<label for="room">Equipo</label>
<select name="room" id="room">
<option value="rojo">Equipo rojo</option>
<option value="amarillo">Equipo Amarillo</option>
<option value="blanco">Equipo Blanco</option>
<option value="azul">Equipo Azul</option>
<option value="negro">Equipo Negro</option>
</select>
</div>
<button id="login-gerente" type="button" class="btn" onclick="myFunction()">Gerente</button>
<button id="login-mecanico" type="button" class="btn" onclick="myFunction2()">Mecanico</button>
<button id="login-capitan" type="button" class="btn" onclick="myFunction3()">Capitan</button>
</form>
</main>
</div>
</html>
<!--<script src="js/api.js"></script>-->
<script src="/js/index.js"></script>
<script>
function myFunction() {
location.replace("Gerente.html")
}
</script>
<script>
function myFunction2() {
location.replace("Mecanico.html")
}
</script>
<script>
function myFunction3() {
location.replace("capitan.html")
}
</script>
</body>
index.js 重定向代码:
window.onload = () => {
document.getElementById("login-gerente").onclick = () => {
console.log("inicio");
//recoger los datos del formulario
let user = {};
user.username = document.getElementById("username").value;
user.room = document.getElementById("room").value;
console.log(user);
//crear el Json de la petición
//peticion post: utilizar fetch
fetch("/jugadores", {
method: 'post',
headers: {
"Content-type": "application/json"
},
body: JSON.stringify(user)
})
.then(user)
.then(function(data) {
console.log('Request succeeded with JSON response', data);
})
.catch(function(error) {
console.log('Request failed', error);
});
//validación de usuario
//redirección
window.location.assign("/Gerente.html")
}
//mecanico
document.getElementById("login-mecanico").onclick = () => {
console.log("inicio");
//recoger los datos del formulario
let user = {};
user.username = document.getElementById("username").value;
user.room = document.getElementById("room").value;
console.log(user);
//crear el Json de la petición
//peticion post: utilizar fetch
fetch("/jugadores", {
method: 'post',
headers: {
"Content-type": "application/json"
},
body: JSON.stringify(user)
})
.then(user)
.then(function(data) {
console.log('Request succeeded with JSON response', data);
})
.catch(function(error) {
console.log('Request failed', error);
});
//validación de usuario
//redirección
window.location.assign("/Mecanico.html")
}
//capitan
document.getElementById("login-capitan").onclick = () => {
console.log("inicio");
//recoger los datos del formulario
let user = {};
user.username = document.getElementById("username").value;
user.room = document.getElementById("room").value;
console.log(user);
//crear el Json de la petición
//peticion post: utilizar fetch
fetch("/jugadores", {
method: 'post',
headers: {
"Content-type": "application/json"
},
body: JSON.stringify(user)
})
.then(user)
.then(function(data) {
console.log('Request succeeded with JSON response', data);
})
.catch(function(error) {
console.log('Request failed', error);
});
//validación de usuario
//redirección
window.location.assign("/Capitan.html")
}
};
server.js 代码:
require('dotenv').config()
const path = require('path');
const http = require('http');
const express = require('express');
const socketio = require('socket.io');
var bodyParser = require('body-parser');
const mongoose = require('mongoose');
const formatMessage = require('./utils/messages');
const {
userJoin,
getCurrentUser,
userLeave,
getRoomUsers
} = require('./utils/users');
const app = express();
const server = http.createServer(app);
const io = socketio(server);
// Set static folder
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({
extended: true
}));
//base de datos
mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true, useUnifiedTopology: true })
const db = mongoose.connection
db.on('error', (error) => console.error(error))
db.once('open', () => console.log('connected to database'))
app.use(express.json())
const jugadoresRouter = require('./routes/jugadores')
app.use('/jugadores', jugadoresRouter)
// fin base de datos
const botName = 'admin';
// Run when client connects
io.on('connection', socket => {
socket.on('joinRoom', ({ username, room }) => {
const user = userJoin(socket.id, username, room);
socket.join(user.room);
// Welcome current user
socket.emit('message', formatMessage(botName, `bienvenido al chat! ${user.username}`));
// Broadcast when a user connects
socket.broadcast
.to(user.room)
.emit(
'message',
formatMessage(botName, `${user.username} Se ha unido al chat`)
);
// Send users and room info
io.to(user.room).emit('roomUsers', {
room: user.room,
users: getRoomUsers(user.room)
});
});
// Listen for chatMessage
socket.on('chatMessage', msg => {
const user = getCurrentUser(socket.id);
io.to(user.room).emit('message', formatMessage(user.username, msg));
});
//listen for solicitud
socket.on('solicitud', (cantidad) => {
const user = getCurrentUser(socket.id);
socket.broadcast.emit('message', formatMessage(botName, `el mecanico (${user.username}) necesita ${cantidad}`));
socket.emit('message', formatMessage(botName, `has solicitado ${cantidad}`));
});
//listen for enviar
socket.on('envio', (cantidad2) => {
const user = getCurrentUser(socket.id);
socket.broadcast.emit('message', formatMessage(botName, `el gerente(${user.username}) ha enviado ${cantidad2}`));
socket.emit('message', formatMessage(botName, `has enviado ${cantidad2}`));
});
// Runs when client disconnects
socket.on('disconnect', () => {
const user = userLeave(socket.id);
if (user) {
io.to(user.room).emit(
'message',
formatMessage(botName, `${user.username} has left the chat`)
);
// Send users and room info
io.to(user.room).emit('roomUsers', {
room: user.room,
users: getRoomUsers(user.room)
});
}
});
});
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => console.log(`Server running on port ${PORT}`));
jugador.js 型号代码:
const mongoose = require('mongoose')
//login schema
const jugadorSchema = new mongoose.Schema({
username:{
type: String,
required: true
},
room:{
type: String,
required: true
},
Date:{
type: Date,
required: true,
default: Date.now
}
})
module.exports = mongoose.model('Jugador', jugadorSchema);
jugadores.js 路由代码:
const express = require('express')
const router = express.Router()
const Jugador = require('../model/jugador')
//getting all
router.get('/', async(req, res) => {
try {
const jugadores = await Jugador.find()
res.json(jugadores)
} catch (err) {
res.status(500).json({ message: err.message })
}
});
//get one
router.get('/:id', getJugador, (req, res) => {
res.json(res.jugador)
});
//post one
router.post('/', async(req, res) => {
console.log(req.body.username);
const jugador = new Jugador({
username: req.body.username,
room: req.body.room
})
try {
const newJugador = await jugador.save()
res.status(201).json(newJugador)
} catch (err) {
res.status(400).json({ message: err.message })
}
res.render('public/Gerente', {
username: jugador.username,
room: jugador.room
});
res.end();
});
//update one
router.patch('/:id', getJugador, async(req, res) => {
if (req.body.username != null) {
res.jugador.username = req.body.username
}
if (req.body.room != null) {
res.jugador.room = req.body.room
}
try {
const updatedJugador = await res.jugador.save()
res.json(updatedJugador)
} catch (err) {
res.status(400).json({ message: err.message })
}
})
//delete one
router.delete('/:id', getJugador, async(req, res) => {
try {
await res.jugador.remove()
res.json({ message: 'Deleted user' })
} catch (err) {
res.status(500).json({ message: err.message })
}
})
//
async function getJugador(req, res, next) {
let jugador
try {
jugador = await Jugador.findById(req.params.id)
if (jugador == null) {
return res.status(404).json({ message: 'Cannot find jugador' })
}
} catch (err) {
return res.status(500).json({ message: err.message })
}
res.jugador = jugador
next()
}
module.exports = router
【问题讨论】:
标签: node.js express mongoose socket.io