Sim*_*nce 1 node.js promise express
我目前在Express Node.js应用程序中定义了POST路由,如下所示:
var locationService = require("../app/modules/locationservice.js");
app.post('/createstop', isLoggedIn, function(req, res) {
locationService.createStop(res, req.body);
});
Run Code Online (Sandbox Code Playgroud)
(对于这个问题,请假定在&db中起作用。.我的记录是在表单提交时创建的,这是我在努力的响应)
locationservice.js
我当时在课堂上有
var models = require('../models');
exports.createStop = function(res, formData) {
models.location.build({ name: formData.name })
.save()
.then(function(locationObj) {
res.json({ dbResult : locationObj });
});
};
Run Code Online (Sandbox Code Playgroud)
如您所见,我的路由调用了导出的函数CreateStop
,该函数使用Sequelize持久层异步插入记录,然后将结果粘贴在承诺的响应中then()
因此,目前只能通过将响应对象传递到locationservice.js
方法中,然后res.json
在其中进行设置来起作用then()
。就我的服务类别而言,这对我而言不是最佳选择,而且感觉也不对。
我想做的是将我的createStop
方法作为promise /回调进行“处理” ,这样我就可以返回新的位置对象(或错误)并在调用方法中进行处理-作为将来的用途方法可能具有要传入/被填充的响应上下文/参数。
因此,在该路线中,我会做更多的事情:
var locationService = require("../app/modules/locationservice.js");
app.post('/createstop', isLoggedIn, function(req, res) {
locationService.createStop(req.body)
.then(dataBack) {
res.json(dataBack);
};
});
Run Code Online (Sandbox Code Playgroud)
这意味着,我可以createStop
在将来的其他地方打电话,并对那个 Promise处理程序中的响应做出反应。但这目前超出了我的范围。我已经完成了尽职调查研究,但是对于我的具体案例,一些个人专家的建议将是最好的。
你locationservice.js
可能看起来像
exports.createShop = function(data){
// here I have used create instead of build -> save
return models.location.create(data).then(function(location){
// here you return instance of saved location
return location;
});
}
Run Code Online (Sandbox Code Playgroud)
然后您的post()
方法应如下所示
app.post('/createstop', isLoggedIn, function(req, res){
locationService.createShop(req.body).then(function(location){
// here you access the location created and saved in createShop function
res.json(location);
}).catch(function(error){
// handle the error
});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1800 次 |
最近记录: |