Nodejs - 尝试编辑图像' Exiftool的元数据

时间:2017-10-24 17:51:19

标签: json node.js express exiftool

我目前正在开发一个NodeJS(Express)项目来编辑图像' Exiftool的元数据。 要编辑图像'使用Exiftool创建元数据,我创建了一个包含要修改的所有元数据的JSON文件,然后执行命令:

exiftool -j=metadata.json pathToTheImage/image.jpg

json文件必须如下:

[{"SourceFile":"pathToTheImage/image.jpg","XMP-dc:Title":"Image's title"}]

这是我的代码:

const {exec} = require('child_process');
let fs = require('fs');
let uploadPath = "uploads";
let uploadName = "image.jpg";

...

app.post('/metadata/editor', (req, res) => {
    let jsonToImport = [...];
    fs.writeFileSync("metadata.json", JSON.stringify(jsonToImport));
    exec('exiftool -j=metadata.json ' + uploadPath + '/' + uploadName, (error, stdout, stderr) => {
        if (error) {
            console.error(error);
            return;
        }
        res.redirect('/metadata/checker/' + uploadName);
    });
});

问题出在" writeFileSync / exec"的水平。 独立地这两行很好用,如果我只是第一行,那么JSON文件就可以很好地创建了。如果我只是第二个ligne,图像的元数据会得到很好的更新。 但是当我一起执行这两行时,JSON文件已经很好地创建了,但是exec行没有"没有" (或者我无法确定的事情)。 这段代码使用同步函数,我用异步函数测试它,这是相同的行为。

目前,为了做我需要的,我必须执行上面的代码来创建JSON文件,然后我必须注释writeFileSync行,我必须重新执行代码才能正确更新图像的元数据。

这很奇怪,我尝试在exec行之前读取JSON文件内容,但一切正常。我已经使用了异步功能,无论有没有承诺......没有什么可以做的。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我回答我自己的问题:

问题是我使用nodemon,但默认情况下nodemon会监视J​​SON文件。但是在我的代码中,我创建了一个JSON文件,以便在之后使用它。因此,我正确地创建了JSON文件,nodemon看到了它,它重新启动了节点服务器,其余的代码没有运行。

所以,我在package.json中添加了这段代码:

"nodemonConfig": {
   "ignore": [
      "path/to/files/to/ingore/*"
    ]
}