找不到".js"文件扩展名的引擎



我想将koa-views与Koa一起使用,将Koa-Router与Next一起使用.js。在以前的项目中,我对快递没有任何问题,但在这个项目中,我必须使用 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渲染文件。如何?

事实证明,

我不需要任何额外的模块来实现这一点 🙀

创建一个调用的函数,即路由,然后将approuter作为参数传递

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)
// })

注释掉的部分是一个精简版本,以表明事情应该在哪里。

最新更新