#node.js #mongodb #express #mongoose
Вопрос:
Я создаю систему входа в систему, и у меня возникли некоторые проблемы, которые я не могу понять, как решить. Я пробовал несколько разных вариантов с помощью find() и findOne (), но ни один из них не работает в моем случае. Ниже приведено первое решение, которое я попытался решить эту проблему.
router.post('/', async (req, res) => {
try {
const user = await User.find(User.username = req.body.user);
if (req.body.pass == user.password)
res.send('Login');
else
res.send('Passwords don't match');
} catch {
res.send('User Not Found');
}
});
Это решение возвращает ответ catch: Пользователь не найден.
Это второе решение, которое я пробовал:
router.post('/', async (req, res) => {
try {
const user = await User.find(User => User.username = req.body.user);
if (req.body.pass == user.password)
res.send('Login');
else
res.send('Passwords don't match');
} catch {
res.send('User Not Found');
}
});
Это решение возвращает: Не удается установить свойство «имя пользователя» равным нулю.
В обоих случаях я отправляю этот запрос: {"user": "Lasse", "pass": "LasseMJ"}
это пользователь, который, как я знаю, существует в моей базе данных.
Это моя схема Мангуста:
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
username: {type: String, required: true},
password: {type: String, required: true}
});
module.exports = mongoose.model('Users', userSchema);
Это мое server.js
const express = require('express');
const bcrypt = require('bcrypt');
const mongoose = require('mongoose');
const userRoutes = require('./routes/users');
const loginRoutes = require('./routes/login');
if (process.env.NODE_ENV != 'production') {
require('dotenv').config();
}
const app = express();
app.use(express.json());
app.use('/users', userRoutes);
app.use('/login', loginRoutes);
mongoose.connect(process.env.DB_CONNECTION, {
useNewUrlParser: true,
useUnifiedTopology: true
});
const db = mongoose.connection;
db.on('error', error => console.error(error));
db.once('open', () => console.log('Connected to db'));
app.listen(3001);
Ответ №1:
AFAIK, find
метод получает условие для поиска документов в качестве объекта JSON. Для поиска пользователя по имени пользователя синтаксис должен быть :
const user = await User.find({username : req.body.user});
Обратите внимание, find
что метод вернет массив вместо объекта, который мы можем использовать findOne
для получения пользовательского объекта, например :
const user = await User.findOne({username : req.body.user});
И в этом случае username
он должен быть уникальным в коллекции.
Вы можете найти более подробную информацию из официального документа Мангуста здесь