Сам учусь создавать API. Мне было интересно, как удалить файл, в котором хранился физический жесткий диск. Я прочитал сообщение о том, что могу использовать fs.unlink для этой работы. Для этого мне нужен путь.
Прежде всего, это моя файловая структура:
root_folder
->api (folder)
-> models (folder)
-> product.js
-> route (folder)
-> products.js
->node_modules
->uploads (image folder)
->app.js (main js file)
->nodemon.json
->package.json
->package-lock.json
->server.js
Это мои файлы модели и маршрута:
product.js (файл модели)
const mongoose = require('mongoose');
const productSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: {type: String, require: true},
price: {type: Number, require: true},
productImage: {type: String, require: true}
});
module.exports = mongoose.model('Product', productSchema);
products.js (файл маршрута)
router.delete('/:productId', (req, res, next) => {
const id = req.params.productId;
Product.deleteOne({_id: id})
.exec()
.then(result => {
res.status(200).json({
message: 'Product Deleted' + test,
request: {
type: 'POST',
url: 'http://localhost:3000/products/',
body: {name: 'String', price: 'Number', productImage: 'String'}
}
});
})
.catch(err => {
console.info(err);
res.status(500).json({
err: err
});
});
});
module.exports = router;
Сохраненные данные в качестве примера:
{
"product": {
"_id": "5b8699c02c457856d08a2084",
"name": "asdasdasd",
"price": 12.1,
"productImage": "uploads\\1535547840473pp.png"
},
"request": {
"type": "GET",
"url": "http://localhost:3000/products/5b8699c02c457856d08a2084"
}
}
Вот мой вопрос. Я хочу получить доступ к загруженному мной файлу. Держу путь в productImage. Как я уже писал, у меня не было доступа. Как мне это сделать, если я хочу удалить файл?





Помощь @ArtemArkhipov в этом Сообщение - реальное решение при получении пути и удалении как записи, так и физического сохраненного файла.
Router.delete('/:productId', checkAuth, (req, res, next) => {
const id = req.params.productId;
var imageName = "";
Product.findById(id)
.select('productImage')
.exec()
.then(docs => {
imageName = docs.productImage;
fs.unlinkSync(__rootdir + "\\" + imageName);
console.info(docs.productImage); // by the way you had misspell here
return Product.deleteOne({_id: id}).exec();
})
.then(() => {
res.status(200).json({
message: 'Product Deleted',
request: {
type: 'POST',
url: 'http://localhost:3000/products/',
body: {
name: 'String',
price: 'Number',
productImage: 'String'
}
}
});
})
.catch(err => {
console.info(err);
res.status(500).json({
error: err
});
});
});