Автор оригинала: 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, а затем создать тест БД, как показано ниже –
Я также включал в проект 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 } ) }
Тестовое приложение с использованием почтальона:
Добавить категорию
Получить категории
Думал, что моя документация Swagger не завершена, но также может быть использована для проверки конечной точки остальных, как показано ниже –