Node JS Экспорт данных в другие JS файлы - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь экспортировать данные в другие 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, определенно дайте мне знать или покажите мне. Спасибо!

...