【发布时间】:2019-04-10 06:29:06
【问题描述】:
我正在开发一个 HapiJS api,并且我已经定义了一个插件来注册 Vision 插件并配置一个渲染引擎 (ejs)。但是当我尝试通过呈现视图来响应请求时,我得到了错误
AssertionError [ERR_ASSERTION]:缺少视图管理器
如果我在插件之外的某处注册 Vision 插件及其配置,则测试通过,但我的期望是我应该能够将此逻辑封装在插件中。
// plugin
const ejs = require('ejs');
const Vision = require('vision');
module.exports = {
name: 'views',
version: '0.0.1',
register: async (server, { path }) => {
await server.register(Vision);
server.views({
engines: { ejs },
path,
});
},
};
处理程序代码是
// api
server.route({
path: '/korin/songs',
method: 'GET',
handler: async (request, h) => {
try {
const acceptType = getMediaType(request.headers.accept);
const data = await server.methods.getTopTracks({
getTopTracks,
lastfmApi,
});
if (acceptType === 'text/html') {
return h.view('index'); // <-- this errors
}
return data;
} catch (error) {
console.warn(error);
}
},
});
错误是由失败的测试产生的
suite('render content', () => {
test.only(`given text/html page should respond with header and footer`, async () => {
const { server } = await setup();
const { payload } = await server.inject({
method: 'GET',
url: '/korin/songs',
headers: {
accept: 'text/html',
},
});
expect(payload).to.contain(`<header>`);
expect(payload).to.contain(`<footer>`);
});
});
// test setup
const setup = async options => {
const server = new Hapi.Server();
// truncated for brevity
await server.register({
plugin: require('../../server/api'),
options: {
...defaults,
...options,
},
});
await server.register({
plugin: require('../../server/views'),
options: { path: path.join(__dirname, '../views/templates') },
});
return {
server
};
};
我有什么遗漏吗?我尝试运行 console.log,代码似乎以正确的顺序运行,但还是失败了。
【问题讨论】:
标签: javascript hapijs hapijs-vision