在 fastify 中使用通配符路由
Using wildcard routes with fastify
我在 SSR 服务器上工作。我有一个包罗万象的动态路由 - loader
用于所有 GET 请求,我正在使用 fastify-static
来处理其他所有内容。
const main = async () => {
process.on('unhandledRejection', err => {
console.error(err);
process.exit(1);
});
const server = fastify({ logger: true });
server.register(shutdown);
server.register(compress);
server.get('/*', fp(loader));
server.register(require('fastify-static'), {
root: path.join(__dirname, '../build/static'),
prefix: '/static'
});
const PORT = process.env.PORT || 3000;
const address = await server.listen(PORT);
server.log.info(`Server running at: ${address}`);
server.gracefulShutdown((signal, next) => {
next();
});
module.exports = server;
};
为了fastify-static
不和动态路由冲突,我加了前缀。在大多数情况下,这工作正常。然而,它确实给我留下了一些问题:
{"method":"GET","url":"/manifest.json","hostname":"localhost:3000","remoteAddress":"127.0.0.1","remotePort":50382},"msg":"incoming request"}
returns 404
- 我的静态路由对
<link href="/icons/favicon.ico" rel="shortcut icon">
没有帮助
处理路由的最简单方法是什么:/manifest.json
和 /icon/favicon.ico
?
我最终得到以下结果:
具有禁用装饰器的静态资产的多个处理程序:
server.register(require('fastify-static'), {
root: path.join(__dirname, '../build/static'),
prefix: '/static',
decorateReply: false
});
server.register(require('fastify-static'), {
root: path.join(__dirname, '../build/icons'),
prefix: '/icons',
decorateReply: false
});
我的加载程序中 /manifest.json
路由的特殊处理程序:
export default (req, res) => {
if (req.url === '/manifest.json') {
fs.readFile(
path.resolve(__dirname, '../build/manifest.json'),
'utf8',
(err, manifest) => {
// If there's an error... serve up something nasty
if (err) {
console.error('Read error', err);
return res.status(404).end();
}
res.send(manifest);
}
);
return;
}
...
我在 SSR 服务器上工作。我有一个包罗万象的动态路由 - loader
用于所有 GET 请求,我正在使用 fastify-static
来处理其他所有内容。
const main = async () => {
process.on('unhandledRejection', err => {
console.error(err);
process.exit(1);
});
const server = fastify({ logger: true });
server.register(shutdown);
server.register(compress);
server.get('/*', fp(loader));
server.register(require('fastify-static'), {
root: path.join(__dirname, '../build/static'),
prefix: '/static'
});
const PORT = process.env.PORT || 3000;
const address = await server.listen(PORT);
server.log.info(`Server running at: ${address}`);
server.gracefulShutdown((signal, next) => {
next();
});
module.exports = server;
};
为了fastify-static
不和动态路由冲突,我加了前缀。在大多数情况下,这工作正常。然而,它确实给我留下了一些问题:
{"method":"GET","url":"/manifest.json","hostname":"localhost:3000","remoteAddress":"127.0.0.1","remotePort":50382},"msg":"incoming request"}
returns 404- 我的静态路由对
<link href="/icons/favicon.ico" rel="shortcut icon">
没有帮助
处理路由的最简单方法是什么:/manifest.json
和 /icon/favicon.ico
?
我最终得到以下结果:
具有禁用装饰器的静态资产的多个处理程序:
server.register(require('fastify-static'), {
root: path.join(__dirname, '../build/static'),
prefix: '/static',
decorateReply: false
});
server.register(require('fastify-static'), {
root: path.join(__dirname, '../build/icons'),
prefix: '/icons',
decorateReply: false
});
我的加载程序中 /manifest.json
路由的特殊处理程序:
export default (req, res) => {
if (req.url === '/manifest.json') {
fs.readFile(
path.resolve(__dirname, '../build/manifest.json'),
'utf8',
(err, manifest) => {
// If there's an error... serve up something nasty
if (err) {
console.error('Read error', err);
return res.status(404).end();
}
res.send(manifest);
}
);
return;
}
...