Reputation: 672
I'm trying to save images in a django style way, where the image gets saved to a folder and the path to the file is returned in a get request.
So far I have the following Picture model:
const PictureSchema = new mongoose.Schema(
{
image: {
type: String,
required: true,
},
},
{
timestamps: true,
}
);
module.exports = mongoose.model("Picture", PictureSchema);
And the following views:
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "data/images");
},
filename: function (req, file, cb) {
cb(null, Date.now() + ".jpg");
},
});
const upload = multer({ storage: storage });
app.post("/upload", upload.single("image"), (req, res) => {
Picture.create({
image: req.file.path,
})
.then((picture) => res.status(201).json(picture))
.catch((err) => res.status(500).json({ error: err.message }));
});
app.get("/", (req, res) => {
Picture.find({}, "-__v")
.then((pictures) => res.status(200).json(pictures))
.catch((err) => res.status(500).json({ error: err.message }));
});
Everything works, the file gets saved to a folder and when I retrieve it shows up like:
{
"_id": "5fd0f1d4f81e3f28b0aa70d3",
"image": "data\\images\\1607528916952.jpg",
"createdAt": "2020-12-09T15:48:36.967Z",
"updatedAt": "2020-12-09T15:48:36.967Z",
"__v": 0
}
But I have express set up to serve the static directory like:
app.use(express.static("data"));
How do I get it to return the instance with the relative path to the image field instead of the relative path from within the file system?
Upvotes: 1
Views: 823
Reputation: 24555
Since you've defined the data
directory to be served statically, you need to request the images using the following url:
http://<yourHost>:<yourPort>/images/160...44.jpg
If you want to change this and only specify the name of the image, you need to adjust the path you pass to the express.static
middleware:
app.use(express.static("data/images"));
Now you can request the images using the following url:
http://<yourHost>:<yourPort>/160...44.jpg
Upvotes: 2