Tengo la siguiente función de eliminación en expressjs, pero cuando intento usar la ruta del elemento que quiero eliminar, aparece como indefinido, pero revisé el tutorial y todavía no veo dónde está el problema:
router.delete('/messagedelete/:empId', function (req, res) { Message.remove({empId: req.params.empId}, function(err, message) { console.log(message.path); console.log("got inside"); if(err) { return res.send({status: "200", response: "fail"}); } console.log(message.path); fs.unlink(message.path, function() { res.send ({ status: "200", responseType: "string", response: "success" }); }); }); });Importo fs como este en la parte superior del archivo:
const fs = require('fs');Hay dos problemas principales:
Cambia esto:
fs.unlink(message.path, function() { res.send ({ status: "200", responseType: "string", response: "success" }); });a:
fs.unlink(message.path, function (err) { if (err) { // handle the error - like res.send with status 500 etc. } res.send ({ status: "200", responseType: "string", response: "success" }); }); No incluyó ninguna información sobre el valor de message.path , pero nunca debe eliminar nada si no está 100% seguro de saber cuál es la ruta y aquí su programa realmente no tiene idea de lo que está tratando de eliminar. podría ser su propio código fuente o algún otro archivo importante en el sistema por lo que sabemos.
Debe usar path.join() para unir algún prefijo de donde desea eliminar los archivos y el message.path que obtuvo, con algo como:
let filePath = path.join(dir, message.path); donde dir es un lugar donde guarda los archivos que desea eliminar; si no lo hace, es posible que esté eliminando archivos en todo el sistema de archivos. Pero eso no es suficiente, en realidad debe verificar si el resultado en filePath no está fuera de dir , lo que bien podría estar si el message.path contenía .. por ejemplo. Así que también necesitas por ejemplo:
if (filePath.indexOf(dir + path.sep) !== 0) { return res.status(403).end('Forbidden'); } Consulte esta respuesta para obtener más ejemplos y más detalles sobre la validación de rutas que compone con path.join y por qué es importante: