Доброго времени суток. Осваиваю 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 все останавливается. Возможно причина в асинхронности процесса, но тогда почему в первом варианте все работает. В общем буду благодарен за совет.
Всем мира и добра.