Pol*_*ino 5 dry node.js express socket.io
My Node.js应用程序提供WebSockets和RESTful接口.我写了一些替代品,Backbone.synch用于与Socket.IO一起使用作为传输.
DRY问题:在客户端事件上执行的回调包含与RESTul路径的回调几乎相同的逻辑.客户端发出的事件和数据之间的映射示例以及相应的操作:
+----------------+---------------------------------+--------------------+
| event emitted | data emitted | RESTful URL |
+----------------+---------------------------------+--------------------+
| read:users | empty string | GET /users |
| read:users | id of the model | GET /users/:id |
| create:users | full model as JSON | POST /users |
| destroy:users | id of the model | DELETE /users/:id |
| update:users | full model as JSON (with id) | PUT /users/:id |
| patch:users | partial model as JSON (with id) | PUT /users/:id |
+----------------+---------------------------------+--------------------+
Run Code Online (Sandbox Code Playgroud)
示例(99%的重复逻辑/代码):
var UserModel = require('./models/user'); // Mongoose model
// Express path
app.get('/users/:id?', function (req, res)) {
var query = !id ? {} : { _id: id };
UserModel.find(query, function (err, doc) {
return err ? res.send(404, null) : res.send(200, doc);
});
};
// SocketIO listening to the read:users event
socket.on('read:users', function(id, cb) {
var query = !id ? {} : { _id: id }
UserModel.find(query, function (err, doc) {
return err ? cb(err.message, null) : cb(null, doc);
});
});
Run Code Online (Sandbox Code Playgroud)
因为我正在使用Node.JS和事件编程(和JavaScript)几天,所以我正在寻找一个关于如何设计"控制器"的好建议,就像一个可以轻松处理重复代码的通用对象.谢谢.
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |