Вставьте данные с foreach и node js - PullRequest
0 голосов
/ 29 января 2020

У меня есть этот код, который вводит данные с помощью тега textarea.

textarea

<form class="" action="/registration/instudent/{{id_school}}/{{tag}}" method="post">

<textarea name="emails" ></textarea>            
<button class="btn btn-lg">Send</button>

</form>

В моем файле js есть следующее

router.post('/instudent/:id_school/:tag', isLoggedIn, async (req,res) => {
  const { id_school, tag} = req.params;
  const { emails } = req.body;

  const uStudent = {
    id_school,
    tag
};

let _emails = emails.split(/\r?\n/);
    _emails.forEach(email => {

        // update uStudent email field
        uStudent.email = email;

        // insert the uStudent
        console.log(uStudent);
        db.query('INSERT INTO date set ?', uStudent);
    });
});

Отправка данных и просмотр их через консоль означает, что все идет хорошо.

{ id_school: '34',tag: '20',email: 'example1@gmail.com' }
{ id_school: '34',tag: '20',email: 'example2@gmail.com' }

Проблема заключается в том, что когда они сохраняются в базе данных, они только сохраняет последнее добавленное электронное письмо.

emailr

Я пытаюсь сохранить электронные письма следующим образом:

emailg

Попробуйте изменить .split на .match, и это не сработает, и измените .split таким образом, но ничего.

let _emails = emails.split('/\r?\n/');
let _emails = emails.split(/\n/);

Я попытался войти .split в foreach, но я не могу его правильно сохранить в базе данных.

    _emails.forEach(email => {
        let _emails = emails.split(/\r?\n/);
        // update uStudent email field
        uStudent.email = email;

        // insert the uStudent
        console.log(uStudent);
        db.query('INSERT INTO date set ?', uStudent);
    });

Ответы [ 2 ]

1 голос
/ 29 января 2020

?‍? Может быть, вы можете попробовать этот код ниже ?:

router.post('/instudent/:id_school/:tag', isLoggedIn, async (req,res) => {
  const { id_school, tag} = req.params;
  const { emails } = req.body;

  const newStudent = [];

  let _emails = emails.split(/\r?\n/);
    _emails.forEach(email => {
        newStudent.push([id_school, tag, email]);
    });


    var sql = "INSERT INTO date (id_school, tag, emails) VALUES ?";

    db.query(sql, [newStudent], function(err) {
      if (err) throw err;
      db.end();
  });
});

? Обновлено: Или, если вы все еще хотите использовать query внутри вашего foreach, , чем вы можете использовать пример кода ниже ?:

router.post('/instudent/:id_school/:tag', isLoggedIn, async (req,res) => {
  const { id_school, tag} = req.params;
  const { emails } = req.body;

 emails.split(/\r?\n/).forEach(email => {
    const sql = 'INSERT INTO `date` (`id_school`, `tag`, `emails`) VALUES (?,?,?)';
    db.query(sql, [id_school, tag, email], (error, result) => {
      if(error) {
        console.log(error.message);
      }
    });
  });
});

Я надеюсь, что это может помочь вам.

0 голосов
/ 29 января 2020

Попробуйте:

db.query('INSERT INTO date set ?', { ...uStudent, email } );
...