我曾经有一个带有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,我会非常高兴!
答案 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。