Creé un archivo desde el cual puedo cargar la imagen con éxito, pero el nombre de la imagen que aparece ( undefiend.jpg ) en este proyecto usa el middleware de carga de archivos express
* administrador.js
var express = require("express"); const productHelpers = require("../helpers/product-helpers"); var router = express.Router(); var productHelper = require("../helpers/product-helpers"); /* GET users listing. */ router.get("/", function (req, res, next) { productHelpers.getAllProducts().then((products) => { console.log(products); res.render("admin/view-products", { admin: true, products }); }); }); router.get("/add-product", function (req, res) { res.render("admin/add-product"); }); router.post("/add-product", (req, res, next) => { productHelpers.addProduct(req.body, (id) => { let image = req.files.Image; console.log(id); image.mv("./public/product-images/" + id + ".jpg", (err) => { if (!err) { res.render("admin/add-product"); } else { console.log(err); } }); }); }); module.exports = router; ayudantes-producto.js
Aquí hago devolución de llamada usando id
product-helpers.js` var db=require('../config/connection') var collection=require('../config/collections') module.exports={ addProduct:(product,callback)=>{ db.get().collection('product').insertOne(product).then((data)=>{ callback(data._id) }) } }`
Creo que deberías usar data.insertedId,
module.exports = { addProduct: (product, callback) => { db.get().collection('product').insertOne(product).then((data) => { callback(data.insertedId) }) } }en la documentación de mongodb https://www.mongodb.com/docs/manual/reference/method/db.collection.insertOne/ , se muestra que insertOne() devuelve
{ "acknowledged" : true, "insertedId" : ObjectId("56fc40f9d735c28df206d078") }Insertar un documento sin especificar un campo _id En el siguiente ejemplo, el documento pasado al método insertOne() no contiene el campo _id:
try { db.products.insertOne({ item: "card", qty: 15 }); } catch (e) { print(e); };La operación devuelve el siguiente documento:
{ "acknowledged" : true, "insertedId" : ObjectId("56fc40f9d735c28df206d078") } Pero de todos modos, puede usar la propiedad de nombre de req.files.image : por ejemplo:
const image = req.files.image; const imageName = image.name; const imagePath = './public/product-images/' + imageName; console.log(imagePath); image.mv(imagePath, (error) => { //something here })Si desea utilizar más propiedades, consulte aquí: https://www.npmjs.com/package/express-fileupload