Поскольку mysql-узел не поддерживает Promise из коробки, а connection.query
основан на обратном вызове. Поэтому вам нужно выполнить Promisify или вручную сделать .query
обещание.
const util = require('util');
router.post('/:user', upload.array('media', 100), async (req, res) => {
const {user} = req.params;
const files = req.files;
if (!files) return res.status(400).json({errors: {msg: 'File missing'}});
var response = [];
const sql = 'INSERT INTO media (path, user, verified) VALUES (?,?,?)';
const promiseQuery = util.promisify(connection.query);
for (var file of files) {
try{
await promiseQuery(sql, [file.originalname, user, 0]);
response.push({path: file.originalname, user: user})
}catch(err){
response.push(err);
}
}
await res.json(response);
});
Но , поскольку вставки не зависят , лучше нажать наобещаю и назову Promise.all
. Проверьте это для подсказок Дождитесь завершения всех обещаний, даже если некоторые отклонят
РЕДАКТИРОВАТЬ : добавление POC, который я использовал для проверки кода.
const multer = require('multer');
const util = require('util');
const bodyParser = require('body-parser');
const express = require('express');
const fs = require('fs');
const app = express();
app.use(
bodyParser.urlencoded({
extended: false
})
);
var upload = multer({ dest: 'uploads/' });
app.use(bodyParser.json());
const somePromise = util.promisify(fs.appendFile);
app.post('/:user', upload.array('media', 100), async (req, res) => {
const { user } = req.params;
const files = req.files;
if (!files) return res.status(400).json({ errors: { msg: 'File missing' } });
var response = [];
for (var file of files) {
const sql = `INSERT INTO media (path, user, verified) VALUES (${file.originalname}, ${user}, 0)\n`;
try {
await somePromise('somefile.txt', sql);
response.push({ path: file.originalname, user: user });
} catch (err) {
response.push(err);
}
}
await res.json(response);
});
// the port where the application run
const port = process.env.PORT || 8080;
app.listen(port, () => console.log(`Listening on port ${port}...`));
после нажатия http://localhost:8080/user
Почтальоном, вот вывод:
[
{
"path": "Screenshot 2019-12-22 at 4.17.34 AM.png",
"user": "user"
},
{
"path": "Screenshot 2019-12-22 at 4.17.34 AM.png",
"user": "user"
}
]