Node.js类API设计原则和工作流程

Node.js类API设计原则和工作流程,node.js,api-design,Node.js,Api Design,我正在为Node.js设计和实现一个API,通过IBM3270协议,使用Node.js从Ubuntu访问IBM大型机。因此Node.js进程生成s3270进程,并使用其stdin、stdout和stderr与IBM大型机通信 我已经实现了以下接口: var hs = require('./hs'); var session = hs.createSession(opts); session.on('error', function(err) { console.log('ERROR: %

我正在为Node.js设计和实现一个API,通过IBM3270协议,使用Node.js从Ubuntu访问IBM大型机。因此Node.js进程
生成
s3270
进程,并使用其
stdin
stdout
stderr
与IBM大型机通信

我已经实现了以下接口:

var hs = require('./hs');

var session = hs.createSession(opts);

session.on('error', function(err) {
  console.log('ERROR: %s', err.message);
});

session.on('connect', function() {
  console.log('** connected');
  session.send('TRANS');
});

session.on('response', function(res) {
  console.log(res);
  session.disconnect();
});

session.on('disconnect', function() {
  console.log('** disconnected');
  session.close();
});

session.on('close', function() {
  console.log('** closed');
});

session.connect();
一切都很顺利

问题如下。我想用它来让使用我的API的客户端代码更有条理,并以
session.send(trans,cb(err,res){}
的形式提供类似Node.js的API我不知道如何以接受回调的方式实现
send
函数

概括我的问题,我想知道设计Node.js这样的API首先应该实现什么:

  • 简单的
    send(trans)
    函数,该函数发出事件,然后使用该函数实现
    send('trans',cb(err,res){})
  • 首先实现
    send('trans',cb(err,res){})
    (我不知道如何实现),然后实现事件或
  • 如何正确实现Node.js类API

我要寻找的是在设计Node.js(如API)时的一般工作流程和设计原则,Q promise library也可以使用这些原则。

正如我意识到的,为Node.js设计异步API有两种方法:

  • 基于回调的,可通过
    EventEmitter
  • 基于承诺的可通过
    var d=Q.defer()实现
    返回d.promise
    d.resolve()来自

为了使代码更有条理,我使用基于承诺的方法实现了API,只使用了Q库。此外,Q库还具有
Q.nfcall()等函数
Q.nfapply()
Q.nfbind()
将基于回调的Node.js API转换为基于承诺的等效API。

它可能无法完全回答您的问题,但请查看Q的
去定义
函数。它可以使用任何基于回调的函数,并将其转换为等效的基于承诺的函数。
Q.denodeify
Q.nfbind
从Node.js样式的函数创建承诺:
send(trans,cb(err,res){}
。重点是如何实现
send
函数,该函数使用
send(trans)
和主要问题代码列表中描述的事件接受回调。无论如何,谢谢你!嗨,我在这里尝试做完全相同的事情,但我正在努力开始!你介意分享一些你的代码样本吗?很抱歉这么晚才回复。工作示例文件非常大,无法粘贴到这里。如果您仍然对工作示例代码感兴趣,请发送电子邮件给我。Hi@VolodymyrProkopyuk,您介意与我分享一些代码吗?