I'm trying to read a video file, given the file name as a request parameter to express router endpoint. However, only the console.log
ging of params happens and I can never see video file data logged into the console. What am I doing wrong here? Any helpful tip is highly appreciated.
var express = require("express");
var fs = require('fs')
var path = require('path')
var router = express.Router();
router.get("/:file", (req, res) => {
console.log(req.params.file)
fs.readFileSync(path.resolve('/uploads', './'+req.params.file), function (err, data){
if (!err) {
console.log("d: ",data);
res.send(data)
} else {
console.log(err);
}
});
});
You don't need to provide a callback to fs.readFileSync, it will return the data once it has completed.
Be aware, it the file size is large, this will block the main thread and would not be considered good practice.
You'd use it like so:
var express = require("express");
var fs = require('fs')
var path = require('path')
var router = express.Router();
router.get("/:file", (req, res) => {
try {
console.log(req.params.file)
let data = fs.readFileSync(path.resolve('/uploads', './'+req.params.file));
console.log("d: ",data);
res.send(data)
} catch (err) {
console.error(err);
res.status(500).send("Something bad happened");
}
});
If you wish to do this asynchronously using fs.readFile, I would modify your code like so:
var express = require("express");
var fs = require('fs')
var path = require('path')
var router = express.Router();
router.get("/:file", (req, res) => {
console.log(req.params.file)
fs.readFile(path.resolve('/uploads', './'+req.params.file), function (err, data){
if (!err) {
console.log("d: ",data);
res.send(data)
} else {
console.log(err);
}
});
});