Я пытаюсь экспортировать данные в другие js файлы. Однако, не уверен, что метод, который я делаю, является правильным. Ниже приведен мой код.
app. js
let createError = require('http-errors');
let express = require('express');
let path = require('path');
let cookieParser = require('cookie-parser');
let logger = require('morgan');
require('./db');
let indexRouter = require('./routes/index');
let usersRouter = require('./routes/upload');
let galleryRouter = require('./routes/gallery');
let app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'node_modules')));
app.use('/', indexRouter);
app.use('/upload', usersRouter);
app.use('/gallery', galleryRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
mysqlQueries. js
let mysql_connection = require('../db');
function InsertQueryFunction(TableName, Values) {
console.log("Coming from insert database script " + Values);
let insertQuery = "INSERT INTO " + TableName + " (photo_name, expiration) VALUES ?";
mysql_connection.query(insertQuery, [Values], function (error, rows) {
if(error){
console.log(error);
} else {
if(rows.affectedRows > 0){
console.log("Number of records inserted: " + rows.affectedRows);
console.log("Success!");
} else {
console.log("Error!!!");
}
}
});
}
module.exports = {InsertQueryFunction};
Прежде всего, как видите, я ' Я пытаюсь делать sql вызовов динамически, превращая их в функции.
функций. js
let path = require('path');
const multer = require('multer');
let mysql = require('./mysqlQueries');
let data = [];
function multerFunction(req, res, filePath){
let newFileName;
let expiration = Date.now();
let storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, filePath);
},
filename: function (req, file, callback) {
console.log("Storage Function " , file);
callback(null, newFileName = Date.now() + path.extname(file.originalname));
data.push([newFileName, expiration]);
}
});
let upload = multer({ storage : storage}).any();
upload(req, res, function (err) {
if(err) {
return res.end("Error uploading file. "+ err);
} else {
mysql.InsertQueryFunction('uploaded_photos', data);
}
});
}
module.exports = {multerFunction, data};
Как видите, я также пытаюсь сделать функции. js file dynamici c. Не уверен, что это лучший способ. Если вы знаете лучший способ, пожалуйста, дайте мне знать. Я в основном пытаюсь отправить «data = []» в маршрут загрузки. js, но получаю «undefined».
загрузка. js
let express = require('express');
let router = express.Router();
let upload = require('../functions/functions');
/* POST upload route. */
router.post('/',(req, res, next) => {
console.log("From upload.js file " + upload.data); // THIS IS WHERE I KEEP GETTING THE UNDEFINED
upload.multerFunction(req, res,'public/images'); // I ONLY WANT TO INSERT THE IMAGE OR IMAGES TO
// THE 'public/images' FOLDER ONLY IF THE
// DATABASE RETURNS SUCCESSFUL.
res.redirect("http://localhost:8000/gallery"); // THEN, REDIRECT TO THE GALLERY PAGE
});
module.exports = router;
Итак, в основном все работает. Когда я загружаю файл с помощью панели инструментов Uppy, он действительно загружается в папку и базу данных. Но я обнаружил, что в случае ошибки в базе данных файл все равно будет загружен в папку. Я хочу загружать файлы в папку «images» только тогда, когда база данных возвращается успешно. Другими словами, "lostRows> 0" означает 1 или более, что возвращает успешное выполнение. Но у меня возникают проблемы при передаче «data = []» из файла functions. js в файл загрузки. js.
Как я упоминал выше, если это не лучший способ структурировать что-либо динамическое c, определенно дайте мне знать или покажите мне. Спасибо!