【问题标题】:Azure Mobile App node.js backend - Custom queries and passing parametersAzure 移动应用 node.js 后端 - 自定义查询和传递参数
【发布时间】:2016-03-24 10:08:07
【问题描述】:

我曾经拥有一个带有 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 移动应用的 node.js 后端做同样的事情。特别是当客户端在请求中传递一些参数时。如何在 node.js 中读取这些参数?以及如何在请求中执行查询之前执行自定义查询?

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

【问题讨论】:

    标签: node.js azure mobile


    【解决方案1】:

    如果我没听错的话,你是想在Mobile Apps的EasyTables脚本中查询一些自定义的SQL stmt在表操作中。

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

    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 中处理参数。 可以参考 GitHub 上的code sample

    【讨论】:

    • 感谢您的回答。但是我必须在哪里编写 SQL 查询? "SELECT * FROM table WHERE ...."
    • 你好@XHotSniperX,其实有两种方法,一种是使用Query Object,可以参考azure.github.io/azure-mobile-apps-node/…
    • 另一种方法是使用SQL stmt,这似乎是您的要求,您可以参考GitHub上的代码示例github.com/Azure/azure-mobile-apps-node/blob/master/samples/…,您可以在中间件中构建类似的代码sn-p。
    • 非常感谢。我会尝试并告诉你。
    • 好吧,我完全不明白。它曾经与我在此处发布的代码一起使用。现在它要复杂10倍。我不知道将后端更改为 node.js 的原因是什么......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多