为node.js创建一个动态的restful api
creating a dynamically restful api for node.js
我在node.js应用程序中几乎所有的东西都使用mongodb,现在我想创建一个restful应用程序,所以,我做到了:
我现在正尝试使用get方法:
restApi.js:
var restAPI = {
get: function(method, model, sort, limit, options) {
if (method !== 'get') {
return;
}
model.find(options).sort(sort).limit(3).exec(function (error, result) {
if (error) {
return error;
} else {
return result;
}
});
},
};
现在我可以在我的路线上要求这个:
var restApi=require('restApi');
并像这样使用:
app.get('/', function(req, res, next) {
var result = restAPI.get('get', Event, 'date', 3, {'isActive': true});
res.render('/', {
result: result
});
});
不起作用,结果未定义。为什么?
如何在带有回调的异步函数中转换它?这是可能的吗?
谢谢!:)
您不会从restApi.get
返回任何内容。如果你使用猫鼬,你可以很容易地返回一个Promise:
var restAPI = {
get: function(method, model, sort, limit, options) {
if (method !== 'get') {
return;
}
return model.find(options).sort(sort).limit(3).exec();
},
};
然后你可以这样使用它:
app.get('/', function(req, res, next) {
restAPI.get('get', Event, 'date', 3, {'isActive': true}).then( function ( result ) {
res.render('/', {
result: result
});
}).catch( error ) {
// Render error page and log error
});
});
这是因为您的模型是异步的。你必须通过回调。
使用异步方式更好,因为它不会在等待响应时阻塞应用程序。
案例示例:
restApi.js:
var restAPI = {
get: function(method, model, sort, limit, options, cb) {
if (method !== 'get') {
return cb("Method must be GET");
}
model.find(options).sort(sort).limit(3).exec(function (error, result) {
if (error) {
return cb(error);
} else {
return cb(null, result);
}
});
},
};
现在我可以在我的路线上要求这个:
var restApi=require('restApi');
并像这样使用:
app.get('/', function(req, res, next) {
restAPI.get('get', Event, 'date', 3, {'isActive': true}, function(err, result){
if(err)
return res.render("Error:" + err)
res.render('/', {
result: result
});
});
});
我已经将cb参数添加到REST API函数中,以便在完成模型异步操作时调用它。
路由器处理程序传递它的回调,并在操作完成时打印输出。
相关文章:
- 使用javascript将动态表从一个html页面打印到另一个html页
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- 使用AngularJS Directive WHITOUT$scope创建一个动态html元素
- 是否可以仅通过jQuery将图像替换为用户动态选择的另一个图像
- 动态构建一个数据表与scriplets
- 动态创建一个javascript/jquery多级数组
- 如何在javascript转换编码中将一个动态值从一个表单添加到另一个页面
- 你能把一个匿名方法(函数)动态地变成一个命名方法吗
- 将动态元素绑定到函数;只剩下一个绑定
- 为json对象创建一个动态表
- 动态修改一个元素,使其与给定的选择器匹配
- 如何查找一个单词在动态创建的html表行中出现的次数
- 从表单中动态生成一个字符串,传递给通过AJAX加载的PHP文件
- 为node.js创建一个动态的restful api
- Javascript动态表,每个单元格都有一个onmouse事件
- 我如何创建一个动态地图来显示我们公司的位置
- 让ASP.NET中继器设置一个动态名称
- 在Javascript中连接一个动态变量名
- 在javascript中动态添加一个选择下拉菜单