CNode

定义controller,大家喜欢哪种写法?

问答
Ii5ting发布于10 年前最后回复10 年前26 回复6612 浏览0 收藏

定义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)

Y
yakczh#1·10 年前

现在一见this就哆嗦

I
i5ting#2·10 年前
引用 yakczh现在一见this就哆嗦

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

A
AnzerWall#3·10 年前

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

I
i5ting#4·10 年前
引用 AnzerWallclass MyController { @GET @URL('/posts') async get (ctx) { ctx.success({posts:await ctx.model('p...

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

S
stonephp#5·10 年前

IMG_1804.JPG

狼叔我这个写法如何?

I
i5ting#6·10 年前
引用 stonephp狼叔我这个写法如何?

@stonephp 取巧,哈哈,用着肯定比较简单

H
hezhongfeng#7·10 年前

直接exports函数的是什么水平~

E
einsqing#8·10 年前

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

D
DuanPengfei#9·10 年前

喜欢传参数的方式,虽然在其他语言的好多框架中不传参数直接用也很方便,不过在 JavaScript 中 this 本来就是一个关键词,类似于 Koa 这样将一些数据直接放在 this 上,用起来有点不清不楚的感觉。

I
i5ting#10·10 年前
引用 hezhongfeng直接exports函数的是什么水平

@hezhongfeng 没有好坏,Node.js可以面向过程,面向对象,函数式,所以用好都是神器

I
i5ting#11·10 年前
引用 einsqingkoahubjs控制器的写法如何? From KoaHub.js

@einsqing 太常见了,thinkjs|php,sails,lavavel都是这样做的,super还不如this呢,哈哈

E
einsqing#12·10 年前
D
DevinXian#13·10 年前

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

E
einsqing#14·10 年前
引用 i5ting@einsqing 太常见了,thinkjs|php,sails,lavavel都是这样做的,super还不如this呢,哈哈

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

From KoaHub.js

A
AnzerWall#17·10 年前
引用 i5ting@einsqing 那条路上大家很难玩出新花样吧

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

E
einsqing#19·10 年前
引用 i5ting@einsqing 那条路上大家很难玩出新花样吧

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

From KoaHub.js

S
stonephp#20·10 年前
引用 einsqing@i5ting 现在node开发效率太低。还是应该以生产力为主 From KoaHub.js

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

S
stonephp#21·10 年前
引用 i5ting@stonephp 取巧,哈哈,用着肯定比较简单

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

E
einsqing#22·10 年前
引用 stonephp@einsqing 我一年开发6个产品你说效率如何?

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

From KoaHub.js

I
i5ting#23·10 年前
引用 einsqing@stonephp 效率太低了,现在nodejs开发web效率,跟php比还是差一大截 From KoaHub.js

@einsqing 推荐你再用go试试

我觉得是哪个熟悉哪个快,我拿node你拿php不见得比我快,我自己node对我自己的php,肯定是比php快,哈哈

S
sharejishu#24·10 年前

为啥要模拟 servlet 呢,servlet 就是因为代入 req res 后和 servlet 环境耦合太高,所以 struts2 和 springMVC 才让 controller 写成 POJO 。前者明显更好。

S
stonephp#25·10 年前
I
i5ting#26·10 年前

对比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);
});
参与回复
登录后即可参与回复。登录