【问题标题】:Accessing res variable from multer disk storage从 multer 磁盘存储访问 res 变量
【发布时间】:2022-02-11 20:58:20
【问题描述】:

我正在使用我的 Node 服务器上的 multer 库来解决这个问题。我正在尝试上传一个或多个文件,然后为每个文件调用数据库,然后将成功或失败发送回客户端。

所以我上传文件的节点服务器路由如下所示:

app.post('/uploadFiles', (req, res) => {
    upload(req, res, async function (err) {
    ...

那么上传功能就是这样:

const upload = multer({ storage: multerStorage }).array('file');

然后是 multerStorage 函数,用于处理 multer 的目标和文件名:

const multerStorage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, process.env.LABELS_LOCATION);
    },
    filename: async function (req, file, cb) {
        // save file info to DB
        const itemID = file.originalname.slice(0, -4);
        const addLabelResult = addLabelToDB(itemID, 0);
        // console.log({ addLabelResult });
        // console.log({ itemID });
        // console.log({ file });
        cb(null, file.originalname);
    },
});

最后是addLabelToDB 函数:

    const addLabelToDB = (itemID, enterType) => {
        const sp = 'insertLabelHistory';
        const inputs = [
            { name: 'itemID', type: sql.NVarChar, value: itemID },
            { name: 'enterType', type: sql.Bit, value: enterType },
        ];
        return executeSP(res, sp, inputs);
    };

所以问题是,如果您查看addLabelToDB 函数,您可以看到对executeSP 的调用接受了res。我想要来自原始/uploadFiles 路线的res。但我不知道如何从这里访问它。如果有更好的完全不同的方法来做到这一点,我会全力以赴。

【问题讨论】:

    标签: javascript node.js multer


    【解决方案1】:

    也许你已经解决了你的问题,但对于未来遇到同样问题的人来说:

    记住你可以通过req.res从req访问res

    在您的情况下,您可以将 res 传递给 addLabelToDB,方法如下:

    const multerStorage = multer.diskStorage({
        destination: function (req, file, cb) {
            cb(null, process.env.LABELS_LOCATION);
        },
        filename: async function (req, file, cb) {
            // save file info to DB
            const itemID = file.originalname.slice(0, -4);
            const addLabelResult = addLabelToDB(req.res, itemID, 0);
            cb(null, file.originalname);
        },
    });
    

    然后在您的 addLabelToDB 上:

        const addLabelToDB = (res, itemID, enterType) => {
            const sp = 'insertLabelHistory';
            const inputs = [
                { name: 'itemID', type: sql.NVarChar, value: itemID },
                { name: 'enterType', type: sql.Bit, value: enterType },
             ];
            return executeSP(res, sp, inputs);
        };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-08
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多