我正在尝试使用hapijs + inert plugin
在我的路线文件中执行此类操作{
method: 'GET',
path: '/l/{path*}',
handler: {
directory: {
path: (req) => {
const defaultDir = '/public';
return getHostInfo(req.headers.host).then((d) => {
if (!d || !d.directory) return defaultDir;
return d.directory;
}).catch((e) => {
return defaultDir;
});
}
}
}
},
path
参数需要一个返回字符串或数组的字符串,数组或函数......在我的例子中,我的函数返回一个promise ...所以它不起作用。
我尝试添加hapi-as-promised
包来修改reply
函数以支持then
方法但不起作用。
基本上我想根据主机头值从一个目录或另一个目录提供静态资产。
答案 0 :(得分:0)
嗯,我脑子里唯一想到的就是这个黑客。首先,你必须制作一个扩展点来制作异步内容:
server.ext({
type: `onPreHandler`,
method: (request, reply) => {
const defaultDir = '/public';
return getHostInfo(request.headers.host).then((d) => {
if (!d || !d.directory) {
request.app.dirPath = defaultDir;
return;
}
request.app.dirPath = d.directory;
}).catch((e) => {
request.app.dirPath = defaultDir;
}).then(() => {
return reply.continue();
});
}
});
然后是路线:
{
method: `get`,
path: `/l/{path*}`,
handler: {
directory: {
path: (request) => {
return request.app.dirPath;
}
}
}
}
我不知道这种方式是对的,但我测试过并且有效。所以我希望这会有所帮助。我必须注意到,出于某种原因,在生产中使用节点到服务器文件并不常见。