1

I'm using deno, oak, and view_engine. Here is my file structure:

server.ts
routes
  user.ts
view
  index.ejs
  /user
    index.ejs

On my server.js this code works as expected:

router
  .get("/", (context: any) => {
    context.render("view/index.ejs");
  });

But, in my routes/user.ts, the following code does NOT work:

router
  .get("user/", (ctx: any) => {
    ctx.render("../view/user/index.ejs")
  });

Inside render, I tried:

${Deno.cwd}"/../view/student/index.ejs"
"/../view/user/index.ejs"

and out of desperation:

"/view/user/index.ejs"

I'm sure there's a super easy, most obvious thing I'm missing here.

ESCoder
  • 15,431
  • 2
  • 19
  • 42
William
  • 31
  • 5

1 Answers1

0

Here is workaround,

import { Application, send, Router } from "https://deno.land/x/oak/mod.ts";
import { viewEngine, engineFactory, adapterFactory, ViewConfig } from 'https://deno.land/x/view_engine/mod.ts';

const ejsEngine = engineFactory.getEjsEngine();
const oakAdapter = adapterFactory.getOakAdapter();

const app = new Application();

app.use(viewEngine(oakAdapter, ejsEngine, {
    viewRoot: "./view",
    viewExt: ".ejs",
}));

const router = new Router();

app.use(router.routes());
app.use(router.allowedMethods());

router
    .get('/', async (ctx, next) => {
        ctx.render("index", { data: { name: "Nikhil" } });
    });

await app.listen({ port: 8000 });

Inside the view folder i have index.ejs

Run files as,

deno run --allow-net --allow-read server.ts

index.ejs

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1>EJS HOLA</h1>
    Hobbies of <%=data.name%>

</body>

</html>

For more resource to add, you can look at view_engine

Community
  • 1
  • 1
Nikhil Savaliya
  • 2,138
  • 4
  • 24
  • 45
  • was still giving me [ERROR]: Property 'render' does not exist on type 'RouterContext, Record>'. but, after pegging oak to v6.0.0, everything worked. – scagnetti Jul 29 '20 at 04:04
  • may be you are misleading argumensts at some point, can you share your code snippet – Nikhil Savaliya Jul 29 '20 at 14:42