node.js - 将查询从链接传递到服务器,第一次加载查询值未定义,重新加载后得到正确的查询

标签 node.js reactjs express react-router next.js

我尝试为外部 adobe stock 创建一些 API。 就像标题中一样,我第一次从未定义的链接路由器收到查询,但重新加载页面后它可以正常工作。我的 主页

<Link 
  href={{
    pathname: "/kategoria-zdjec", 
    query: images.zdjecia_kategoria
  }}
  as={`/kategoria-zdjec?temat=${images.zdjecia_kategoria}`}
  className={classes.button}>
</Link>

和我的服务器

app
 .prepare()
 .then(() => {
   server.get("/kategoria-zdjec", async (req, res) => {
     const temat = await req.query.temat;
     console.log(temat)
     const url = `https://stock.adobe.io/Rest/Media/1/Search/Files?locale=pl_PL&search_parameters[words]=${temat}&search_parameters[limit]=24&search_parameters[offset]=1`;
      try {
        const fetchData = await fetch(url, {
          headers: { ... }
         });
         const objectAdobeStock = await fetchData.json();
         res.json(objectAdobeStock);
         const totalObj = await objectAdobeStock.nb_results;
         const adobeImages = await objectAdobeStock.files;
      } catch (error) {
         console.log(error);
      }
  });

看起来就像下一页上的 getInitialProps

    Zdjecia.getInitialProps = async ({req}) => {
      const res = await fetch("/kategoria-zdjec");
      const json = await res.json();
      return { total: json.nb_results, images: json.files };
    }

我认为这是异步造成的问题。

最佳答案

我认为这可能是由于您正在使用 fetch这实际上是 Web API 的一部分,在服务器上执行时此操作会失败。

您可以使用 isomorphic-fetch这使客户端和服务器之间的 fetch API 保持一致,或者使用 node-fetch当在服务器上调用 fetch 时:

Zdjecia.getInitialProps = async ({ req, isServer }) => {
  const fetch = isServer ? require('node-fetch') : window.fetch;
  const res = await fetch("/kategoria-zdjec");
  const json = await res.json();
  return { total: json.nb_results, images: json.files };
}

关于node.js - 将查询从链接传递到服务器,第一次加载查询值未定义,重新加载后得到正确的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60367073/

相关文章:

javascript - 英特尔 Edison node.js 示例代码不适用于 BMP 180 - gy68 气压计

javascript - 如何连接样式

javascript - 这个符号 { $ {`expirydate` } } 的含义是什么以及如何使用它

node.js - 如何使用 Passport 验证 React 应用程序?

node.js - 如果状态为 302,axios 会进入 catch 函数而不是 then

angularjs - 运行 npm install 时无法验证第一个证书

node.js - 如何将 facebook 爬虫机器人重定向到另一个网页?

javascript - 无法在 ReactJS 中访问 'this'

javascript - 使用 socket.io 和 Express JS 的聊天应用程序

javascript - req.flash 不是 Nodejs 的函数