在node.js的Express POST路由中定义/使用Promise

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处理程序中的响应做出反应。但这目前超出了我的范围。我已经完成了尽职调查研究,但是对于我的具体案例,一些个人专家的建议将是最好的。

pio*_*ias 5

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)