如何组合多个 getServerSideProps 函数
How to combine multiple getServerSideProps function
我有两个页面; index.js 和 other.js, 在 index.js 我有一个方法 getServerSideProps
;
export async function getServerSideProps(context)
{
//code here
}
我想在 other.js 页面中使用相同的功能。因为 index.js getServerSideProps 中的代码很长,所以我不得不将 index.js 中的 getServerSideProps
导入到 other.js,做类似的事情;
import { getServerSideProps } from "./index";
...
export { getServerSideProps };
它工作正常,但问题是,我想在 getServerSideProps
中发出另一个仅在 other.js 页面中运行的请求。一种方法是复制我为 index.js 编写的 getServerSideProps
代码并将其粘贴到 other.js 中并修改代码。问题是,正如我之前提到的,getServerSideProps
中的代码非常庞大,我不想将其复制并粘贴到我需要的所有页面中。
我的问题是,如何将另一个 getServerSideProps
添加到我已经从另一个页面导出的那个。基本上,我想将 index.js 中导出的 getServerSideProps
合并到 other.js
中本地的 getServerSideProps
如果您想重用相同的 getServerSideProps
函数,但有条件地 运行 根据调用它的页面的特定代码,您可以尝试使用 context.req
对象:
index.js
export default function Home({ data }) {
return <>{data}</>;
}
export async function getServerSideProps(context) {
let foo;
// Parse `message.url` into parts. An alternative to using the `URL` class
// would be to use `context.resolvedUrl`, but that will take more effort to
// isolate pathnames when query parameters are involved.
const reqUrl = new URL(
context.req.url,
`https://${context.req.headers.host}`
);
const thisPage = reqUrl.pathname;
const queryParams = reqUrl.searchParams;
switch (thisPage) {
case "/":
// code for index.js
foo = "Hello, index.js!";
break;
case "/other":
// code for other.js
foo = "Hello, other.js!";
break;
default:
foo = "Hello, world!";
}
// common code
console.log("`thisPage`:", thisPage);
console.log("`context.resolvedUrl`:", context.resolvedUrl);
console.log("`queryParams`:", queryParams);
return {
props: { data: foo },
};
}
other.js
import { getServerSideProps } from "./index";
export default function Other({ data }) {
return <>{data}</>;
}
export { getServerSideProps };
我有两个页面; index.js 和 other.js, 在 index.js 我有一个方法 getServerSideProps
;
export async function getServerSideProps(context)
{
//code here
}
我想在 other.js 页面中使用相同的功能。因为 index.js getServerSideProps 中的代码很长,所以我不得不将 index.js 中的 getServerSideProps
导入到 other.js,做类似的事情;
import { getServerSideProps } from "./index";
...
export { getServerSideProps };
它工作正常,但问题是,我想在 getServerSideProps
中发出另一个仅在 other.js 页面中运行的请求。一种方法是复制我为 index.js 编写的 getServerSideProps
代码并将其粘贴到 other.js 中并修改代码。问题是,正如我之前提到的,getServerSideProps
中的代码非常庞大,我不想将其复制并粘贴到我需要的所有页面中。
我的问题是,如何将另一个 getServerSideProps
添加到我已经从另一个页面导出的那个。基本上,我想将 index.js 中导出的 getServerSideProps
合并到 other.js
getServerSideProps
如果您想重用相同的 getServerSideProps
函数,但有条件地 运行 根据调用它的页面的特定代码,您可以尝试使用 context.req
对象:
index.js
export default function Home({ data }) {
return <>{data}</>;
}
export async function getServerSideProps(context) {
let foo;
// Parse `message.url` into parts. An alternative to using the `URL` class
// would be to use `context.resolvedUrl`, but that will take more effort to
// isolate pathnames when query parameters are involved.
const reqUrl = new URL(
context.req.url,
`https://${context.req.headers.host}`
);
const thisPage = reqUrl.pathname;
const queryParams = reqUrl.searchParams;
switch (thisPage) {
case "/":
// code for index.js
foo = "Hello, index.js!";
break;
case "/other":
// code for other.js
foo = "Hello, other.js!";
break;
default:
foo = "Hello, world!";
}
// common code
console.log("`thisPage`:", thisPage);
console.log("`context.resolvedUrl`:", context.resolvedUrl);
console.log("`queryParams`:", queryParams);
return {
props: { data: foo },
};
}
other.js
import { getServerSideProps } from "./index";
export default function Other({ data }) {
return <>{data}</>;
}
export { getServerSideProps };