У меня в базе данных две таблицы:
Пользователи: ![enter image description here](https://i.stack.imgur.com/JMivD.png)
and
comments:
введите описание изображения здесь
Пользователи, аутентифицированные с помощью Passport.js
, могут входить в комнаты. Когда эти зарегистрированные пользователи отправили сообщение, мне нужно сообщение go в таблицу комментариев, которая имеет внешний ключ из пользовательской таблицы.
Я не уверен, что использую правильную решение. Но вот то, что я пытался использовать, я знаю, что это неправильно, но как мне изменить, чтобы комментарии вошедших пользователей в мою таблицу комментариев:
router.post("/superhero-movies", function(req, res) {
const { comments } = req.body;
const sqlDatabase = require('../db.js');
sqlDatabase.query('INSERT INTO comments (comments) VALUES (?)', [comments], function(error, results, fields) {
if (error) throw error;
console.log(results);
return res.render('superhero-movies')
})
})
router.get("/superhero-movies", authenticationMiddleware(), function(req, res) {
res.render('superhero-movies');
router.post("/login",
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login',
// failureFlash: true,
}));
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true,
},
function(req, email, password, done) {
console.log(email, password, done);
const sqlDatabase = require('../db.js');
sqlDatabase.query('SELECT * FROM users WHERE email = ?', [email], (err, results, fields, res) => {
if (err)
return done(err);
console.log(err, fields, results);
if (results.length === 0) {
done(null, false, { message: 'Check email and password again.' });
} else {
const hash = results[0].
password.toString();
const user_id = results[0].id;
bcrypt.compare(password, hash, function(err, response) {
console.log(user_id);
if (response === true) {
return done(null, user_id);
} else {
console.log(user_id);
console.log(err);
return done(null, false, { message: 'This is a test notification.' });
}
})
}
})
}));
passport.serializeUser(function(user_id, done) {
console.log(user_id);
done(null, user_id);
console.log(done);
console.log('serialized', user_id);
});
passport.deserializeUser(function(user_id, done) {
done(null, user_id);
console.log(done);
console.log('deserialized', user_id);
});
sqlMessage: 'Cannot add or update a child row: a foreign key constraint fails (`app_users`.`comments`, CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`comments_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)',
Не уверен, что я должен использовать разделенный запрос с выбором и вставкой, или если я все делаю неправильно.
Простите за неправильную обработку после оператора вставки. Исправлю.