使用fs阅读视频文件,readFileSync在node.js中不起作用

m1m5dgzv  于 2023-06-29  发布在  Node.js
关注(0)|答案(2)|浏览(174)

我试图读取一个视频文件,给定文件名作为请求参数来表达路由器端点。然而,只有console.log的参数发生,我永远无法看到视频文件数据记录到控制台。我做错了什么?任何有用的提示是高度赞赏。

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);
        }
    });
});
e7arh2l6

e7arh2l61#

你不需要提供一个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);
        }
    });
});
mrfwxfqh

mrfwxfqh2#

您可以考虑在这里使用流方法,以便发送大数据

相关问题