将变量从自定义服务器传递到 NextJS 中的组件
Pass variables from custom server to components in NextJS
我已经在 NextJS 中设置了自定义服务器,如图所示 here 用于自定义路由。
server.js:
app.prepare()
.then(() => {
createServer((req, res) => {
const parsedUrl = parse(req.url, true)
const { pathname, query } = parsedUrl
if (foreignLang(pathname, lang)) {
app.render(req, res, checkLangAndConvert(links, pageVal, pathname, lang), query)
} else {
handle(req, res, parsedUrl)
}
})
.listen(port, (err) => {
if (err) throw err
console.log(`> Ready on http://localhost:${port}`)
})
})
对于 i18n,它基本上将 /en/url
映射到 /another_url
。
我知道我可以在这里使用 query
参数并在组件中读取它,但我想将选项传递给 App
而无需重新检查 URL。是否可以在不阅读 URL?
的情况下将选项从服务器级别传递到应用程序级别
编辑: 经过一些调查后,标记的答案解释说 query
实际上并不意味着 URL 中的查询参数,而不是传递从服务器到客户端的值。误导性词语,因为它仅表示客户端操作。这正是我需要的。
这里有一个例子custom-server-express where they pass id
from server to client side
所以在你的情况下它会是这样的
server.js
const { createServer } = require('http');
const { parse } = require('url');
const next = require('next');
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
createServer((req, res) => {
const parsedUrl = parse(req.url, true);
const { pathname, query } = parsedUrl;
if (pathname === '/pl/index') {
app.render(req, res, '/index', { ...query, lang: 'pl' });
} else if (pathname === '/en/index') {
app.render(req, res, '/index', { ...query, lang: 'en' });
} else {
handle(req, res, parsedUrl);
}
}).listen(port, err => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
});
});
pages/index.js
import React from 'react';
import { withRouter } from 'next/router';
function IndexPage(props) {
return <h1>index lang: {props.router.query.lang}</h1>;
}
export default withRouter(IndexPage);
转到 /pl/index
将呈现 index lang: pl
和
转到 /en/index
将相应地呈现 index lang: en
希望对您有所帮助!
我已经在 NextJS 中设置了自定义服务器,如图所示 here 用于自定义路由。
server.js:
app.prepare()
.then(() => {
createServer((req, res) => {
const parsedUrl = parse(req.url, true)
const { pathname, query } = parsedUrl
if (foreignLang(pathname, lang)) {
app.render(req, res, checkLangAndConvert(links, pageVal, pathname, lang), query)
} else {
handle(req, res, parsedUrl)
}
})
.listen(port, (err) => {
if (err) throw err
console.log(`> Ready on http://localhost:${port}`)
})
})
对于 i18n,它基本上将 /en/url
映射到 /another_url
。
我知道我可以在这里使用 query
参数并在组件中读取它,但我想将选项传递给 App
而无需重新检查 URL。是否可以在不阅读 URL?
编辑: 经过一些调查后,标记的答案解释说 query
实际上并不意味着 URL 中的查询参数,而不是传递从服务器到客户端的值。误导性词语,因为它仅表示客户端操作。这正是我需要的。
这里有一个例子custom-server-express where they pass id
from server to client side
所以在你的情况下它会是这样的
server.js
const { createServer } = require('http');
const { parse } = require('url');
const next = require('next');
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
createServer((req, res) => {
const parsedUrl = parse(req.url, true);
const { pathname, query } = parsedUrl;
if (pathname === '/pl/index') {
app.render(req, res, '/index', { ...query, lang: 'pl' });
} else if (pathname === '/en/index') {
app.render(req, res, '/index', { ...query, lang: 'en' });
} else {
handle(req, res, parsedUrl);
}
}).listen(port, err => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
});
});
pages/index.js
import React from 'react';
import { withRouter } from 'next/router';
function IndexPage(props) {
return <h1>index lang: {props.router.query.lang}</h1>;
}
export default withRouter(IndexPage);
转到 /pl/index
将呈现 index lang: pl
和
转到 /en/index
将相应地呈现 index lang: en
希望对您有所帮助!