Tengo un problema en esta parte de mi código, con COMMONJS y está funcionando, mi pregunta es cómo puedo hacer que funcione en ESM, he intentado esto pero no funciona:
import express from 'express'; const router = express.Router(); import cloudinary from 'cloudinary'; import { unlinkSync } from 'node:fs'; const router = require('express').Router(); const cloudinary = require('cloudinary'); const { unlinkSync } = require('node:fs'); // we will upload image on cloudinary cloudinary.config({ cloud_name: process.env.CLOUDINARY_CLOUD_NAME, api_key: process.env.CLOUDINARY_API_KEY, api_secret: process.env.CLOUDINARY_API_SECRET }); // Upload image only admin can use router.post('/upload', (req, res) => { try { cloudinary.v2.uploader.upload(file.tempFilePath, { folder: 'test' }, async (err, result) => { if (err) throw err; removeTmp(file.tempFilePath); res.json({ public_id: result.public_id, url: result.secure_url }); }); } catch (err) { return res.status(500).json({ msg: err.message }); } }); const removeTmp = (path) => { unlinkSync(path, err => { if(err) console.log('this is the error',err);; }); console.log(`successfully deleted ${path}`); }; module.exports = router;Prueba este:
import express from 'express'; import multer from 'multer'; import { v2 as cloudinary } from 'cloudinary'; import streamifier from 'streamifier'; import { isAdmin, isAuth } from '../utils.js'; const upload = multer(); const uploadRouter = express.Router(); uploadRouter.post( '/', isAuth, isAdmin, upload.single('file'), async (req, res) => { cloudinary.config({ cloud_name: process.env.CLOUDINARY_CLOUD_NAME, api_key: process.env.CLOUDINARY_API_KEY, api_secret: process.env.CLOUDINARY_API_SECRET, }); const streamUpload = (req) => { return new Promise((resolve, reject) => { const stream = cloudinary.uploader.upload_stream((error, result) => { if (result) { resolve(result); } else { reject(error); } }); streamifier.createReadStream(req.file.buffer).pipe(stream); }); }; const result = await streamUpload(req); res.send(result); } ); export default uploadRouter;