Node.js Вставить комментарии во MySQL вторую таблицу с внешним ключом - - PullRequest
0 голосов
/ 14 июля 2020

У меня в базе данных две таблицы:

Пользователи: enter image description here

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)',

Не уверен, что я должен использовать разделенный запрос с выбором и вставкой, или если я все делаю неправильно.

Простите за неправильную обработку после оператора вставки. Исправлю.

1 Ответ

0 голосов
/ 27 июля 2020

Я знаю, что недавно отправил этот вопрос, но я просто хочу опубликовать ответ на случай, если он кому-то понадобится в будущем. 1004 *

...