@Arche46

Почему не уходит sql запрос в базу?

Доброго времени суток. Осваиваю node.js express.js. На этапе отправки POST запроса возникла проблема.
Пока все писал в один файл все работает. Тестирую в Postman, запрос на localhost:5000/
import express from 'express'
import mysql2 from 'mysql2'

const PORT = 5000

const app = express()

const connection = mysql2.createConnection({
  host: 'localhost',
  user: 'root',
  database: 'Nodejs',
  password: '',
})

app.use(express.json())

app.post('/', (req, res) => {
  try {
    const { id, title, content } = req.body

    const post = {
      id,
      title,
      content,
    }

    const sql = `INSERT INTO posts (id, title, content) VALUES('${id}', '${title}', '${content}')`

    connection.query(sql, function (err, results) {
      if (err) console.log(err)
      console.log(results)
    })

    res.status(200).json(post)
  } catch (err) {
    res.status(500).json(err)
  }
})

async function startApp() {
  try {
    connection.connect(function (err) {
      if (err) {
        return console.error('Ошибка: ' + err.message)
      } else {
        console.log('Подключение к серверу MySQL успешно установлено')
      }
    })

    app.listen(PORT, () => console.log('SERVER STARTED ON PORT ' + PORT))
  } catch (e) {
    consolel.log(e)
  }
}

startApp()


Далее создал отдельный файл для эндпоинтов, импортировал класс Router из express.js. Перенес логику запроса из первого файла. Зарегистрировал роут app.use('/api', router)
Теперь файл index.js выглядит так:
import express from 'express'
import mysql2 from 'mysql2'
import router from './router.js'

const PORT = 5000

const app = express()

const connection = mysql2.createConnection({
  host: 'localhost',
  user: 'root',
  database: 'Nodejs',
  password: '',
})

app.use(express.json())

app.use('/api', router)

async function startApp() {
  try {
    connection.connect(function (err) {
      if (err) {
        return console.error('Ошибка: ' + err.message)
      } else {
        console.log('Подключение к серверу MySQL успешно установлено')
      }
    })

    app.listen(PORT, () => console.log('SERVER STARTED ON PORT ' + PORT))
  } catch (e) {
    consolel.log(e)
  }
}

startApp()


Файл router.js выглядит так:
import Router from 'express'

const router = new Router()

router.post('/posts', async (req, res) => {
  try {
    const { id, title, content } = req.body

    const post = {
      id,
      title,
      content,
    }

    const sql = `INSERT INTO posts (id, title, content) VALUES ('${id}', '${title}', '${content}')`

    connection.query(sql, (err, result) => {
      if (err) {
        console.log(err)
      }
      console.log(result)
    })

    res.status(200).json(post)
  } catch (err) {
    res.status(500).json(err)
  }
})

export default router

Делаю запрос в Postman на localhost:5000/api/posts
и ничего не происходит. Данные в функцию приходят, проверил консоль логом, но на connection.query все останавливается. Возможно причина в асинхронности процесса, но тогда почему в первом варианте все работает. В общем буду благодарен за совет.
Всем мира и добра.
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
@historydev
Острая аллергия на анимешников
Попробуй добавить import connection from 'index' в файле router.js.
Callback твоего router.post('/posts', async (req, res) => { знать не знает что такое connection.

Странно что у тебя в ошибку код не падает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы