在Koa上下文中找不到render()

时间:2018-04-15 15:28:18

标签: node.js typescript redirect koa koa2

我是koa @ 2的新手,我正在尝试重定向到特定页面。我能够重定向到静态页面,但我想将一些数据发送到该页面进行显示。我搜索了这样做的方法,发现ctx(Koa Context)有一个方法render(),它有两个args(第一页url,2nd-locals(我们的数据))。

我尝试过:

const Koa = require('koa');
const render = require('koa-ejs');
const path = require('path');

const app = new Koa();
render(app, {
  root: path.join(__dirname, 'view'),
  layout: 'template',
  viewExt: 'html',
  cache: false,
  debug: true
});

app.use(async function (ctx) {
  await ctx.render('user');
});

app.listen(7001);

和此:

import co from 'co';
import render from 'koa-ejs';

render(app, options);
app.context.render = co.wrap(app.context.render);

app.use(async (ctx, next) => {
    await ctx.render(view, locals);
});

来自:herehere

但我总是在ctx上找不到属性渲染。 我尝试将ctx的类型从BaseContex更改为IRouter,但发布的版本相同。 我觉得我需要将render属性附加到ctx,但我不知道该怎么做。

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用第一种方式:

ctx.render的第二个参数是您的数据

<强> index.js

const Koa = require('koa');
const render = require('koa-ejs');
const path = require('path');

const app = new Koa();
render(app, {
  root: path.join(__dirname, 'view'),
  layout: 'template',
  viewExt: 'html',
  cache: false,
  debug: true
});

app.use(async function (ctx) {
  await ctx.render('user', { a: 'apple', b: 'ball', c: 'cat' });
});

app.listen(7001);

在同一级别,您需要有一个view文件夹,其template.html因为您将布局指定为模板而viewExt指定为html

这是template.html的示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Template</title>
    <link rel="stylesheet" href="">
</head>
<body>
    <h1>THIS IS THE TEMPLATE!!!</h1>
    <h2><%= a %></h2>
    <h2><%= b %></h2>
    <h2><%= c %></h2>
</body>
</html>

另外,认为发布package.json文件

会更好
{
  "name": "stovrflow",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "koa": "^2.5.1",
    "koa-ejs": "^4.1.1"
  }
}