Next.js 如何从Nextjs中的url参数获取数据?
我在后端定义_id:questionId,我想在前端动态获取我的questionId 我的路线:router.post(“/community/postAnswer”,postAnswer) 节点中的我的控制器方法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
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参数传递我的数据呢?