koa2报错TypeError: ctx.render is not a function
发布于 7 年前 作者 feivorid 10190 次浏览 来自 问答

小弟刚学习koa2 想自己写一个简单的小例子 结果遇到如下问

untitled1.png

代码地址: 代码地址

希望各位大大帮忙看一下 我查了好多资料也没找到解决问题的办法;

12 回复

各位大神们帮帮忙 😢

代码并没错,你环境有问题吧

@JustforNode 环境是这样的 untitled2.png

安装koa-views

@i5ting 是的 已经安装了 但是还是不行

试试 await this.render('index')

你装的koa-routerkoa-views是匹配koa 1.x的,装下针对v2.x的吧。

npm install koa@next koa-router@next koa-views@next --save

@hellopao 沃日 确实是 是koa-router 版本的问题 ; 多谢 指导; 谢谢您 ;

@azathothes 问题已经解决了 , 谢谢您 ;

模板引擎版本不对,所以没有对应的render方法绑定到context上

@DevinXian 经过测试 应该不是 模板引擎的问题 应该是koa-router 版本的问题 谢谢你的回答

我这次碰到同样问题,希望给大家个帮助: 原因是:我把

app.use(views(__dirname + '/server/views', {
	extension: 'ejs',
}));

放在某些get,post路由后面了! 理由: 由于koa-views中间件结构

module.exports = viewsMiddleware
function viewsMiddleware (path, ref) {
			 return function views (ctx, next) {
 				 if (ctx.render) return next();
				 ctx.render = function (relPath, locals) {
				 	//some code
				 }
			 }
}

先get,post路由处理,然后再处理返回的views函数的话,因为那时还没有添加这个方法 所以报出了出现的ctx.render is not function问题。 不知道为神马写成中间件,而不是采用写成类似express的render方法挂在app.response原型而把render挂在ctx的原型上的方案。

回到顶部