【问题标题】:Download a PDF file in Node and redirect into front end React在 Node 中下载 PDF 文件并重定向到前端 React
【发布时间】:2019-04-11 00:33:55
【问题描述】:

你能帮我在 Node.js 中下载一个文件并将页面重定向到前端吗?我正在使用 MERN 堆栈(Mongo、Express、React、Node)。

通过 Google Auth 进行身份验证后,我想在 Node 中下载一个文件,然后我想重定向页面。

router.get(
    '/auth/google/callback',
    passportGoogle.authenticate('google', {
        failureRedirect: '/',
    }),
    (req, res) => {
        try {
          var file = 'resume.pdf';
          res.download(file, (err => {
          if (err) {
                console.log(err)
          } else {
                window.location.href = '/';
          }
        }));
    }
);

我试过这段代码,但下载后它没有将页面重定向到前端。

【问题讨论】:

    标签: javascript node.js reactjs


    【解决方案1】:
       (req, res) => {
            try {
              var file = 'resume.pdf';
              res.download(file, (error => {
              if (!error) {
                  window.location.replace("http://stackoverflow.com");
              } else {
                    console.log(error)
              }
            }));
        } 
                catch {
                        console.log(error)
        }
    

    【讨论】:

    • 它不工作ReferenceError: window is not defined
    【解决方案2】:

    由于标头已随下载响应一起发送,因此您必须采用与此不同的路径。

    您需要自己更改响应。

    var data = //filedata
    res.set({
        Content-Type: 'text/plain',
        Location: '/'
    });
    res.end(data);
    

    相应地使用 Location 标头进行重定向。 在客户端上,您需要使用:

    window.location.replace("/headerLocation");
    

    你想在你的下载pdf方法回调成功后在客户端使用这个。

    获取窗口未定义的原因是因为您试图在 nodejs 服务器上执行此操作。窗口对象存在于客户端。

    【讨论】:

    • 我们无法向前端res.download(file, (err => {res.redirect('/desiredURL');发送两个响应
    • 编辑了我的答案。所以基本上无论你从哪里请求,添加一些逻辑来重定向到 Location 标头。
    • 简单的语法问题...只需在我添加的代码中的最后一个大括号之后添加 )...。如果您对 javascript 没有很好的感觉,您可能会遇到一些问题的解决方案我提供了。您可能还需要设置 Content-Type。我将编辑我的答案,并给你更多内容。
    • 这里有几个问题。语法是其中之一。在 Content-Type 中,Content- 后面有一个空格,这会导致代码中断。但是,我认为这里的主要问题是对您正在使用的框架和语言缺乏基本的理解。我不能带你经历整个磨难。在开始这样的项目之前,您对 node.js 和 javascript 的理解应该会更好一些。但是,如果您发布调用 api 的客户端代码,这也会有所帮助。
    猜你喜欢
    • 2020-06-09
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多