我想将koa-views与Koa一起使用,并将Koa-Router与Next.js一起使用。在以前的项目中,express没有任何问题,但是在这个项目中,我必须使用Koa。我要使用其路由器渲染页面:/some/page/:id
。遵循相同的Nextjs方式:
router.get('/some/page/:id', async (ctx, next) => {
const actualPage = '/some/page/id' // id.js (not actual name ?)
await ctx.render(actualPage, {/* could pass object */})
});
如果我使用快递,那会起作用。使用Koa:
const Koa = require('koa');
const views = require('koa-views');
// const render = require('koa-views-render'); <-- I what's this?
[..] // Making things short here
const server = new Koa();
const router = new Router();
// My issue, I'm seeing tutorials using other engines: .ejs etc
// I'm not using any, I only have .js files
server.use(views(__dirname + "/pages", { extension: 'js' }));
使用与上述相同的router.get...
函数,我得到:
错误:找不到“ .js”文件扩展名的引擎
当我转到/some/page/123
时,我希望它能够渲染文件/pages/some/page/id.js
。怎么样?
答案 0 :(得分:0)
事实证明,我不需要任何其他模块即可实现此功能
创建一个称为的函数,即路由,然后将app
和router
作为参数传递
const routes = (router, app) => {
router.get('/some/page/:id', async (ctx) => {
const { id } = ctx.params
const actualPage = '/some/page/id'
// Render the page
await app.render(ctx.req, ctx.res, actualPage, {foo: 'Bar'})
}
}
module.exports = routes
在您的server.js
文件中:
// const routes = require('./routes);
// const app = next({ dev }); // import other modules for this section
// app.prepare().then(() => {
// const router = new Router();
// [..]
// routes(router, app)
// })
已注释掉的部分是精简版,目的是指出应该在哪里。