我是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);
});
但我总是在ctx上找不到属性渲染。 我尝试将ctx的类型从BaseContex更改为IRouter,但发布的版本相同。 我觉得我需要将render属性附加到ctx,但我不知道该怎么做。
有人可以帮我这个吗?
答案 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"
}
}