Рубрики
Без рубрики

Узел экспресс для управления загрузкой файлов с Postgres и Sequelize

Это демонстрация конечной точки развития экспресс-узла, чтобы принять файл в качестве данных формации и хранить информацию в Postgres DB, используя SEXELIZE ORM. Исходный код можно скачать из моего Git Hub …

Автор оригинала: DhananjayKumar.

Это демонстрация конечной точки развития экспресс-узла, чтобы принять файл в качестве данных формации и хранить информацию в Postgres DB, используя SEXELIZE ORM.

Исходный код можно скачать с моего репозитория GitHUB Sequelize-fileupload Отказ

Sequelize – это Node.js ORM на основе обещания для Postgres, MySQL, Mariadb, SQLite и Microsoft SQL Server. Он оснащен прочной поддержкой транзакции, отношения, страдания и ленивая погрузка, прочитайте репликацию и многое другое. Для получения подробной документации вы можете проверить это Отказ

Я использую Малтер который является промежуточным программным обеспечением Node.js для обработки multipart/form-data, который в основном используется для загрузки файлов. Загруженный файл сохраняется на сервере, и информация файла сохраняется в Postgres DB.

Этот пример предполагает, что PostgreSQL BD уже установлен. Вы можете использовать PGADMIN и CHEC The Connection, а затем создать тест БД, как показано ниже –

pg.jpg.

Я также включал в проект Swagger-ui и написал документацию вручную.

Пакеты, используемые в этом примере

"express": "^4.17.1",
"multer": "^1.4.2",
"pg": "^7.12.1",
"sequelize": "^5.15.1",
"swagger-ui-dist": "^3.23.5",
"swagger-ui-express": "^4.0.7"

app.js.

var app = express();
const port = process.env.PORT || 3000

global.appRoot = __dirname;

app.use(bodypareser.json()); 
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
categoryApi(app,db);

app.listen(port, ()=> console.log(`Application started on Port ${port}.`));

Контроллеры/категория

const multer = require('multer');
const fs = require('fs');

const upload = multer({ dest: '/tmp/'});

module.exports = (app, db) => {
    app.get( "/categories", (req, res) =>
        db.Category.findAll({raw: true})
            .then( (result) => res.json(result) )
    );

    app.post('/categories', upload.single('file'), (req,res) => {
        const file = global.appRoot + '/uploads/' + req.file.filename;
        fs.rename(req.file.path, file, function(err) {
            if (err) {
                console.log(err);
                res.send(500);
            } 
            else {
                  db.Category.create({
                        name: req.body.name,
                        description: req.body.description,
                        poster : req.file.filename
                    })
                    .then(r =>  {
                    res.send(r.get({plain:true}));
                    });
            }
          });
    })
}

Настроить SEXELIZE и его модель.

Модели \ Sequelize.js.

const Sequelize = require('sequelize');
const CategoryModel = require('./category');

const sequelize = new Sequelize('testdb', 'postgres', 'Manav2020#', {
    host : 'localhost',
    dialect: 'postgres'
});

const Category = CategoryModel(sequelize, Sequelize);

//Pass { force: true } as option if you want to force delete and recreate.
sequelize.sync() 
  .then(() => {
    console.log(`Database & tables created!`)
});

module.exports = {
    Category
}

Модели \ catery.js.

module.exports = (sequelize, DataTypes) => {
    return sequelize.define('category', {
        id: {
          type: DataTypes.INTEGER,
          primaryKey: true,
          autoIncrement: true
        },
        name: DataTypes.STRING,
        description: DataTypes.STRING,
        poster: DataTypes.STRING,
      },
      {
        freezeTableName: true // Model tableName will be the same as the model name
      }
    )
}

Тестовое приложение с использованием почтальона:

Добавить категорию

1.jpg.

Получить категории

2.jpg.

Думал, что моя документация Swagger не завершена, но также может быть использована для проверки конечной точки остальных, как показано ниже –

Swagger.jpg.