Azure移动应用程序node.js后端 - 自定义查询和传递参数

时间:2016-03-23 22:48:29

标签: node.js azure mobile

我曾经有一个带有JavaScript后端的Azure移动服务。现在我使用node.js后端切换到新的Azure移动应用程序。 由于对node.js的处理方式不同,我想问你如何做一些过去与旧版后端一起工作的简单事情。

首先,我如何修改服务器端的“读取”或“插入”请求,例如,执行自定义查询。我曾经这样做过:

function read(query, user, request) {
var visitorID = request.parameters.visitor;
var liked = request.parameters.liked;
var link = request.parameters.link;
if (visitorID && !liked && !link) {
    if (visitorID.indexOf(" ") == -1) {
        var sqlUnique = "SELECT TOP 1 * FROM ........;";
        mssql.query(sqlUnique, {
            success: function(results) {
                if(results.length > 0) {
                    request.respond(statusCodes.OK, results);   
                }
                else {
                    request.respond(statusCodes.BAD_REQUEST, {error: 'An error message.'});
                }
            },
            error: function(err) {
                request.respond(statusCodes.BAD_REQUEST, {error: 'There was a problem with the request.'});
            }
        });
    } else {
        request.respond(statusCodes.BAD_REQUEST, {error: 'Invalid username.'});
    }
}
else {
    // no server-side action needed
    request.execute();
}

}

正如您所看到的,每当客户端从服务器读取时,其他一些事情都会被执行。我现在的问题是,如何使用Azure Mobile App的node.js后端做同样的事情。特别是当客户端在请求中传递一些参数时。如何在node.js中读取这些参数?如何在请求中执行查询之前执行自定义查询?

如果有人可以帮助我将上述JavaScript代码移植到node.js,我会非常高兴!

1 个答案:

答案 0 :(得分:1)

如果我没有误解,您希望在移动应用程序的EasyTables脚本中查询表操作中的一些自定义SQL stmt。

我们可以利用"使用()"自定义中间件,以指定针对表格的每个请求执行的中间件,作为http://azure.github.io/azure-mobile-apps-node/module-azure-mobile-apps_express_tables_table.html#~use上azure-mobile-apps sdk文档的描述。

var queries = require('azure-mobile-apps/src/query');
var readMiddleware = function(req,res,next){
    var table = req.azureMobile.tables('table2'),
    query = queries.create('table2')
            .where({ TestProperty : req.body.testproperty });
    table.read(query).then(function(results) {
        if(results){
            req.someStoreData = somehander(results); //some hander operations here to get what you want to store and will use in next step
            next();
        }else{
            res.send("no data");
        }
    });
};

table.read.use(readMiddleware, table.operation);
table.read(function (context) {
   console.log(context.req.someStoreData);
   return context.execute();
});

您可以参考SO上的类似问题Query other tables in insert function of Azure Table Storage

你可以通过context.req.query.someparams获取表操作闭包中的参数,类似于我们在expressjs中处理params。 您可以参考GitHub上的code sample