0

The goal is to have routes like this - /names/A for every letter all the way through Z. Instead of having 26 html pages for each letter, I want to have one dynamic html page that will show the information for the letter in the url. I am attempting to do this with koa, koa-route, and koa-session2.

Here is my attempt, and it's giving the error Cannot set property 'levelOneLetter' of undefined which means ctx.session is undefined in names.levelOne.

var Koa = require("koa");
var route = require("koa-route");
var session = require("koa-session2");

var routes = require("./routes/routes.js");

// dynamic routes
const names = {
  levelOne: (ctx, letter) => {
    ctx.session.levelOneLetter = letter;
    console.log('letter', letter);
    app.use(route.get('/names/' + letter, routes.levelOne));
  }
};

app.use(route.get('/names/:letter', names.levelOne));

//in routes
module.exports.levelOne = function *() {
    this.status = 200;
    this.state.levelOneLetter = ctx.session.levelOneLetter;
    this.body = yield renderView("names", "level-one", this.state);
};
Linx
  • 753
  • 3
  • 15
  • 34

1 Answers1

0

From the example code you have provided I can see that you haven't applied the koa-session2 middleware to the Koa app. This why ctx.session is undefined.

app.use(session())
Dominic Egginton
  • 346
  • 2
  • 10