我正在编写一个将电子邮件文件(.eml)及其链接到的登录页面转换为可打印PDF的应用程序。通常可以,但是当我尝试在任何事情发生之前写入文件时,它就会中断。
(工作)过程如下:
uploads
文件夹中Generate PDF
get-session-token
,该请求:
process-email
,并传递文件名和令牌,该请求包括:
3.b
中生成的文件夹中(它使用客户端提供的令牌找到该文件夹)process-email
返回任何链接,则发送请求到process-page
,并传递URL和令牌。此端点的详细信息与问题无关到目前为止,所有这些方法都可以正常工作,但是我的问题是,当互联网中断(或公司服务器因提出过多请求而将我赶出去)时,所有进度都将丢失。所以我想我可以将进度保存在本地的json文件中,以后可以继续。
为此,我有一个projects.json
文件,从理论上讲,该文件将包含有关您要构建的PDF的信息。
在服务器上运行get-session-token
时,它将加载projects.json
文件并添加会话令牌的条目。没别的了,因为这是坏处。
出于某种原因,当我这样做时,它会:
process-email
的调用成功完成,返回的链接与以前相同process-page
的呼叫中断。我得到TypeError: Failed to fetch
。尽管请求完全相同,但看起来请求甚至没有发出。当我注释掉写到projects.json
的行时,一切正常。当我取消注释时,它会破裂。
实际上,我什至没有尝试读取文件,而只是向其中写入一个空字符串。仍然会破坏它。
在发生其他任何事情之前,我还尝试过同步写入文件。还是一切。
这里有一些非常简单的代码,可以使一切成败:
export const generateProject = (cb: (err: any, token: string)=>void) => {
const token = generateSessionToken();
// Write fake data to the projects file
fs.writeFileSync(path.join(__dirname, '../public/projects.json'), "{}");
// Create folder with session token as name
fs.mkdir(path.join(__dirname, '../public/gen/' + token), err => {
if (err) {
cb(err, null);
} else {
cb(null, token);
}
});
};
问题所在是writeFileSync
。如果存在,则process-email
有效,但process-page
无效(它正在管理第一个请求,但不管理第二个请求?)。如果将该行注释掉,则一切正常。
我要疯了。