我试图读取一个视频文件,给定文件名作为请求参数来表达路由器端点。然而,只有 console.log
发生params的ging,我从来没有看到视频文件数据记录到控制台。我在这里做错了什么?任何有用的提示都非常感激。
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);
}
});
});
你不需要提供一个回调到 fs.readFileSync一旦完成,它将返回数据。
请注意,如果文件的大小很大,这将阻塞主线程,这不是一个好的做法。
你会像这样使用它。
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");
}
});
如果你想用异步的方式来完成这个任务,就使用 fs.readFile我想修改你的代码,就像这样。
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);
}
});
});