定义controller,大家喜欢哪种写法?
发布于 8 年前 作者 i5ting 5636 次浏览 来自 问答

定义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}`
  } 
}

大家喜欢哪种写法?

26 回复

现在一见this就哆嗦

@yakczh koa 1.x时代吓怕了,哈哈

class MyController { @GET @URL(’/posts’) async get (ctx) { ctx.success({posts:await ctx.model(‘post’).find()}) } }

@AnzerWall ctx作为参数有点怪,不如req和res直接,无论是express,还是servlet都是这样传值的

IMG_1804.JPG

狼叔我这个写法如何?

@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呢,哈哈

@i5ting this可以替代super,但是推荐super调用。

From KoaHub.js

偏向第二种吧,对新手友好一点点~更express;第一种更koa——真是servlet风格…结合ejs(jsp)- -

@i5ting 只有一个问题,无法控制请求类型。所以准备新增自定义路由

From KoaHub.js

@DevinXian 哈哈,感谢回复

@einsqing 那条路上大家很难玩出新花样吧

@i5ting 这里传递ctx是传递的koa的上下文,我们这边是基于koa2包装的一个框架,为了便于测试,不要求类继承于任何一个框架相关的类,所以也就不包装this提供函数支持,直接写在了ctx中。

@i5ting 现在node开发效率太低。还是应该以生产力为主

From KoaHub.js

@einsqing 我一年开发6个产品你说效率如何?

@i5ting 非常简单,所以我招人要求可以很低。

@stonephp 效率太低了,现在nodejs开发web效率,跟php比还是差一大截

From KoaHub.js

@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);
});
回到顶部