Javascript Nodejs从HTTP请求中丢失数据

Javascript Nodejs从HTTP请求中丢失数据,javascript,node.js,http,fs,Javascript,Node.js,Http,Fs,我目前正试图从HTTP请求中获取一个文件,然后将数据写入一个文件(在本例中为PDF) 使用以下命令,我可以生成有效的PDF,但我发送的文件只有几行,但我创建的文件是空白的 我用于尝试获取数据的函数: async function getDataFromReq(req){ let body = ''; await req.on('data', (chunk) => { body += chunk; }); return body; } 我实现

我目前正试图从HTTP请求中获取一个文件,然后将数据写入一个文件(在本例中为PDF)

使用以下命令,我可以生成有效的PDF,但我发送的文件只有几行,但我创建的文件是空白的

我用于尝试获取数据的函数:

async function getDataFromReq(req){
    let body = '';
    await req.on('data', (chunk) => {
        body += chunk;
    });
    return body;
}
我实现该函数并将其写入文件:

let file = await getDataFromReq(req);
await writeFile(fileName,file);
我的写入文件功能:

async function writeFile(fileName,file){
    fs.writeFileSync('./'+fileName, file);
}
注:

我能够使用King Friday的解决方案,但我接受了Quentins的建议,并使用现有的库来完成这项任务,而不是重新发明轮子。我使用multer遵循本指南-

  • 你只能有效地等待承诺
  • req.on
    不返回承诺
您需要:

  • 摆脱
    wait
    内部
    getDataFromReq
  • getDataFromReq
    的声明中去掉
    async
    (除非在声明中使用
    wait
    ,否则它毫无意义)
  • getDataFromReq
  • 在传入数据完成传入时注册处理程序(
    req.on('end'),…
  • 解析该处理程序中的承诺
  • 然而,不重新发明轮子可能会更容易。和已经有了基于承诺的模块。

    • 你只能有效地等待承诺
    • req.on
      不返回承诺
    您需要:

  • 摆脱
    wait
    内部
    getDataFromReq
  • getDataFromReq
    的声明中去掉
    async
    (除非在声明中使用
    wait
    ,否则它毫无意义)
  • getDataFromReq
  • 在传入数据完成传入时注册处理程序(
    req.on('end'),…
  • 解析该处理程序中的承诺
  • 然而,不重新发明轮子可能会更容易。已经有基于承诺的模块用于和。

    就是这样 然后您可以在异步方法中使用,如

    const body = await getDataFromReq(req);
    await fs.writeFile(fileName, body);
    
    像这样 然后您可以在异步方法中使用,如

    const body = await getDataFromReq(req);
    await fs.writeFile(fileName, body);
    

    我不认为
    req.on()
    会返回一个承诺。您可以创建自己的
    resolve(body)
    req.on('end')中
    writeFile
    函数也不需要是异步函数,因为
    fs.writeflesync
    是同步的。我不认为
    req.on()
    返回一个承诺。您可以创建自己的承诺,并在
    req.on('end')内
    resolve(body)
    函数
    writeFile
    也不需要是异步函数,因为
    fs.writeFileSync
    是同步的。我实现了你的代码,所以谢谢你。不幸的是,我似乎还是遇到了同样的问题。PDF只是空白,但有一些元信息,比如作者。我还做了什么吗uld有错吗?@Niall你应该到这里->codesandbox.io并选择一个节点沙盒,然后你可以把你的代码放在这里并进行协作,这意味着我可以看一看并调整一下。我真的很喜欢他们的服务。@Niall还可以看一看这里有关fs的内容->@Niall我调整过,可能会有帮助,请参阅节点v10+的兼容fs承诺参考。@Niall这是proba布莱:这是一个很好的电话。你会发现有很多很好的npm软件包。祝你好运。我实现了你的代码,所以谢谢你。不幸的是,我似乎仍然遇到同样的问题。PDF只是空白,但有些元信息是存在的,比如作者。我做的还有什么可能是错误的吗?@不,你应该这么做转到这里->codesandbox.io并选择一个节点沙盒,然后您可以放置您的代码并进行协作,这意味着我可以查看和调整。我非常喜欢他们的服务。@Niall还可以查看这里有关fs的内容->@Niall我调整过,可能会有所帮助,请查看节点v10+的兼容fs promises参考。@Niall这可能是一个不错的选择。您会在那里找到有很多很棒的npm软件包,祝你好运。