Next.js 如何从Nextjs中的url参数获取数据?

Next.js 如何从Nextjs中的url参数获取数据?,next.js,Next.js,我在后端定义_id:questionId,我想在前端动态获取我的questionId 我的路线:router.post(“/community/postAnswer”,postAnswer) 节点中的我的控制器方法 exports.postAnswer = (req, res) => { const answer = req.body.answer || ""; const userId = req.user._id || ""; con

我在后端定义_id:questionId,我想在前端动态获取我的questionId

我的路线:router.post(“/community/postAnswer”,postAnswer)

节点中的我的控制器方法

exports.postAnswer = (req, res) => {
  const answer = req.body.answer || "";
  const userId = req.user._id || "";
  const questionId = req.body.questionId || "";
  Question.findOne({ _id: questionId }, (err, question) => {
    if (err) {
      res.status(400).json({
        error: errorHandler(err),
      });
      return;
    }
    if (!question) {
      res.status(400).json({
        error: "question not found",
      });
      return;
    }
    let newAnswers = [...question.answers, { answer, userId }];
    return question.updateOne({ answers: newAnswers }, (err, success) => {
      if (err) {
        res.status(400).json({
          error: errorHandler(err),
        });
        return;
      }
      if (success) {
        res.json({
          msg: "Answer posted successfully",
        });
      } else {
        res.json({
          error: "Something went wrong. Please try again.",
        });
      }
    });
  });
前端中的提取方法

export const createAnswer = async (answer, token, questionId) => {
  try {
    console.log(answer, questionId);
    const response = await fetch(`${API}/api/community/postAnswer`, {
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json",
        Authorization: `Bearer ${token}`,
      },
      body: JSON.stringify({ answer, questionId }),
    });
    let data = await response.json();

    console.log(data);
    return data;
  } catch (err) {
    console.log(err);
    return err;
  }
};
const AnswerComp = ({ questionId }) => {
  const [values, setValues] = useState({
    answer: "",
    error: false,
    success: false,
    posted: false,
    postButton: "Post answer",
  });
  const { answer, error, success, postButton } = values;
  const token = getCookie("token");
  const clickSubmit = (e) => {
    e.preventDefault();
    setValues({ ...values, postButton: "posting..." });
    createAnswer(answer, token, questionId).then((res) => {
      if (res.error) {
        setValues({ ...values, error: res.error });
      } else {
        setValues({
          ...values,
          posted: true,
          postButton: "posted",
          success: res.success,
        });
      }
    });
  };
在我的组件中,我创建了AnswerComp并定义了questionId。单击提交,我想获得答案、令牌和问题ID。我得到了前两个,但questionId没有定义

export const createAnswer = async (answer, token, questionId) => {
  try {
    console.log(answer, questionId);
    const response = await fetch(`${API}/api/community/postAnswer`, {
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json",
        Authorization: `Bearer ${token}`,
      },
      body: JSON.stringify({ answer, questionId }),
    });
    let data = await response.json();

    console.log(data);
    return data;
  } catch (err) {
    console.log(err);
    return err;
  }
};
const AnswerComp = ({ questionId }) => {
  const [values, setValues] = useState({
    answer: "",
    error: false,
    success: false,
    posted: false,
    postButton: "Post answer",
  });
  const { answer, error, success, postButton } = values;
  const token = getCookie("token");
  const clickSubmit = (e) => {
    e.preventDefault();
    setValues({ ...values, postButton: "posting..." });
    createAnswer(answer, token, questionId).then((res) => {
      if (res.error) {
        setValues({ ...values, error: res.error });
      } else {
        setValues({
          ...values,
          posted: true,
          postButton: "posted",
          success: res.success,
        });
      }
    });
  };
我创建了我的AnswerComp组件的一个页面

import Head from "next/head";
import Link from "next/link";
import { withRouter } from "next/router";
import { createAnswer } from "../../actions/community";
import AnswerComp from "../../components/community/AnswerComp";
import { API, DOMAIN, APP_NAME, FB_APP_ID } from "../../config";

const Answer = ({ answer, questionId, community, query }) => {
  return (
    <React.Fragment>
      <AnswerComp />
    </React.Fragment>
  );
};

Answer.getInitialProps = async ({ query }) => {
  const res = await createAnswer(query.questionId);
  if (res.error) {
    console.log(res.error);
  } else {
    return { answer: res.answer, query };
  }
};

export default withRouter(Answer);
从“下一个/Head”导入Head;
从“下一个/链接”导入链接;
从“下一个/路由器”导入{withRouter};
从“../../actions/community”导入{createAnswer}”;
从“../../components/community/AnswerComp”导入AnswerComp;
从“./../config”导入{API、域、应用程序名称、FB\U应用程序ID};
常量答案=({答案,问题ID,社区,查询})=>{
返回(

400(错误请求)

createAnswer
方法中,执行
console.log(answer,questionId);
打印
答案和
questionId
?它只打印答案。questionId没有定义。这就是我想要打印的内容。我觉得我必须在我的路线中通过动态路线。post。我们是如何呈现的“/:slug”有一点我很困惑,如果我用一个特定的id回答一个特定的问题,它是否应该同时打印我的答案和问题id。但是如何从url参数传递我的数据呢?在
createAnswer
方法中,
console.log(答案,问题id)
打印
答案
问题ID
?它只打印答案。问题ID没有定义。这就是我想打印的内容。我觉得我必须通过路线中的动态路线。post。我们是如何呈现“/:slug”有一点我很困惑,如果我用一个特定的id回答一个特定的问题,它是否应该同时打印我的答案和问题id。但是如何从url参数传递我的数据呢?