在node.js中使用fs.readFileSync读取视频文件无法正常工作。

问题描述 投票:1回答:1

我试图读取一个视频文件,给定文件名作为请求参数来表达路由器端点。然而,只有 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);
        }
    });
});
node.js file express fs
1个回答
1
投票

你不需要提供一个回调到 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);
        }
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.