NodeJS 如何在提交表单时使用getServerSideProps获取数据?

mm5n2pyu  于 2023-05-17  发布在  Node.js
关注(0)|答案(1)|浏览(90)

我试图获取废弃的网站数据时,一个表单提交了一个网址。例如,在我的表单上,如果我提交https://www.google.com,网站数据将被抓取。
我的实现是在Next.js中,它是API路由。以下是步骤:
1.我有一个前端表单:

import React from "react";
import { useState } from "react";

export default function InputURL() {
  const [url, setUrl] = useState(null);

  const handleSubmit = (e) => {
    e.preventDefault();

    fetch("/api/url", {
      method: "post",
      body: JSON.stringify(url),
    });
  };

  return (
    <div>
      <form onSubmit={handleSubmit}>
        <div>
          <label>
            URL
          </label>
          <input
            onChange={(e) => setUrl(e.target.value)}
            type="url"
          />
          <button
            type="submit">
            Download
          </button>
        </div>
      </form>
    </div>
  );
}

在表单提交时,url被发送到我的API routes文件/pages/api/url.js进行处理。
1.我抓取网址,然后抓取数据

export async function getData(submittedUrl) {
  const url = submittedUrl;

  let results = {};
  const performScrape = async (url) => {
    ///... scraping logic
    return results;
  };

  return performScrape(url)
    .then((results) => {
      ///... more scraping logic
      return jsonData;
    })
}

export default async function handler(req, res) {
  const inputUrl = req.body;
  const jsonData = await getData(inputUrl);
  res.status(200).json(jsonData);
}

3. Now, in my home page, index.js, I call for the data returned to me from `url.js`:

````js

import React, { useState, useEffect } from "react";

import { getData } from "./api/url";

export default function Home({ scrappedJSON }) {
  const scrappedWebsiteAxeData = JSON.parse(scrappedJSON);

  return (
      <main>
        {scrappedWebsiteAxeData}
      </main>
  );
}

export async function getServerSideProps({ req }) {
  const res = await getData(req?.body);
  const data = JSON.stringify(res);
  return { props: { axeJSON: data } };
}

然而,当我加载我的页面时,我得到一个错误Error: Error serializing .axeJSON returned from getServerSideProps in "/". Reason: undefined cannot be serialized as JSON. Please use null or omit this value.,我相信这是因为用户没有提交URL。有没有一种方法可以等待用户在表单中提交一个URL,这样getServerSideProps就不会出错?

xwbd5t1u

xwbd5t1u1#

您可以执行此脚本:

while not condition:
    #insert knowledgeable crap here

我对Python不是很有经验,但这可能会解决你的问题。

相关问题