【发布时间】:2021-03-05 12:54:22
【问题描述】:
我有一个页面,我需要使用 axios 获取包含凭据的数据,并根据 url 中的参数使用上一个请求中的数据发出另一个请求。
我不知道如何解决这个问题,因为我可以在页面中同时使用 getInitialProps 和 getStaticProps,而在组件中我根本无法使用它们。
下面的代码有效,但我不知道如何分解它,以便在服务器端完成登录,以便我仍然可以从 URL 获取参数。
function Result({surveyId, responseId, sessionKey}) {
return (
<>
<div>surveyId: {surveyId}</div>
<div>responseId: {responseId}</div>
<div>sessionKey: {sessionKey}</div>
</>
)
}
Result.getInitialProps = async ({ query }) => {
// Example of URL
// http://localhost:3000/result?surveyId=12345&responseId=6
const surveyId = query.surveyId
const responseId = query.responseId
const data = { method: 'get_session_key', params: ['admin', 'password'], id: 1 }
const options = {
headers: {
'connection': 'keep-alive',
'content-type': 'application/json'
}
}
const sessionKey = await axios.post(url, data, options).then(
(response) => {
return response.data.result
},
(error) => {
console.log(error)
}
)
return {
surveyId: surveyId,
responseId: responseId,
sessionKey: sessionKey,
}
}
【问题讨论】:
-
您在问题中提到的组件是什么?第二个 API 调用是什么?你也不能在 getInitialProps 中实现它吗?否则,您可以使用 useEffect 钩子在 react 组件中进行 API 调用,因此请在 props 中传递您需要的信息。
-
我实际上并没有将组件放在示例中,我在文档中读到 getStaticProps 只能从页面级别访问。 nextjs.org/docs/basic-features/… 1.第一个API调用应该在服务器端进行,我想登录LimeSurvey,我通过登录名和密码来接收密钥, 2.在客户端,我想从中获取两个参数url 3. 下一个 LimeSurvey 调用 API 需要 key 和两个参数,我没有放在示例代码中,这个我可以在 getInitialProps 中做
-
目前还不清楚是什么问题。您正在服务器上进行第一次调用(通过 getInitialProps),并且将第二次调用所需的所有 3 个参数传递给组件。有什么问题? “以便在服务器端完成登录”是什么意思?
-
我不想在 getInitialProps 中通过 XHR 传递登录名和密码。
标签: next.js limesurvey