定义controller,大家喜欢哪种写法?
处理get请求,就直接写一个get方法即可
class MyController extends BaseController {
get () {
var a = this.query.a
return `hello world ${a}`
}
}
模拟servlet,在get方法里传参数,req和res
class MyController extends BaseController {
get (req, res) {
var a = req.query.a
return res.body = `hello world ${a}`
}
}
大家喜欢哪种写法?
现在一见this就哆嗦
@yakczh koa 1.x时代吓怕了,哈哈
@AnzerWall ctx作为参数有点怪,不如req和res直接,无论是express,还是servlet都是这样传值的
狼叔我这个写法如何?
@stonephp 取巧,哈哈,用着肯定比较简单
直接exports函数的是什么水平~
koahubjs控制器的写法如何?
import base from "./base.controller";
export default class extends base{
constructor(ctx, next) {
super(ctx, next);
console.log('index constructor');
}
index() {
super.view(1);
}
index2() {
super.json(1,2);
}
async index3() {
await super.render('index');
}
}
From KoaHub.js
喜欢传参数的方式,虽然在其他语言的好多框架中不传参数直接用也很方便,不过在 JavaScript 中 this 本来就是一个关键词,类似于 Koa 这样将一些数据直接放在 this 上,用起来有点不清不楚的感觉。
@hezhongfeng 没有好坏,Node.js可以面向过程,面向对象,函数式,所以用好都是神器
@einsqing 太常见了,thinkjs|php,sails,lavavel都是这样做的,super还不如this呢,哈哈
偏向第二种吧,对新手友好一点点~更express;第一种更koa——真是servlet风格…结合ejs(jsp)- -
@DevinXian 哈哈,感谢回复
@einsqing 那条路上大家很难玩出新花样吧
@i5ting 这里传递ctx是传递的koa的上下文,我们这边是基于koa2包装的一个框架,为了便于测试,不要求类继承于任何一个框架相关的类,所以也就不包装this提供函数支持,直接写在了ctx中。
@einsqing 我一年开发6个产品你说效率如何?
@i5ting 非常简单,所以我招人要求可以很低。
@einsqing 推荐你再用go试试
我觉得是哪个熟悉哪个快,我拿node你拿php不见得比我快,我自己node对我自己的php,肯定是比php快,哈哈
为啥要模拟 servlet 呢,servlet 就是因为代入 req res 后和 servlet 环境耦合太高,所以 struts2 和 springMVC 才让 controller 写成 POJO 。前者明显更好。
@i5ting 狼叔跟我的体会一致,我现在node.js开发不我几年前玩khkphp开发效率高多了
对比express写一个简单的转换
class MyController extends BaseController {
constructor (ctx, next) {
super(ctx, next)
this.path = '/user/:id'
}
get (req, res) {
return 'user ' + req.params.id
}
}
// express
app.get('/user/:id', function(req, res) {
res.send('user ' + req.params.id);
});