首页 > 解决方案 > Node - 基于 url 的 Koa 动态路由

问题描述

目标是拥有这样的路线 -/names/A每个字母一直到 Z。我希望有一个动态 html 页面,而不是每个字母都有 26 个 html 页面,它将在 url 中显示字母的信息。我正在尝试使用koa,koa-routekoa-session2.

这是我的尝试,它给出了错误Cannot set property 'levelOneLetter' of undefined,这意味着 ctx.session 在 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);
};

标签: node.jsdynamickoakoa-routerctx

解决方案


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())

推荐阅读