我正在寻找使用Azure移动服务创建预定作业。
由于该服务最终会调用另一个云服务(网站),我想知道移动脚本是否可以访问云服务已经存在的数据库。
据我所知,您可以指定一个用于移动脚本的数据库(我选择免费进行日志记录)但似乎无法判断您是否可以通过API访问其他数据库。
var todoItemsTable = tables.getTable('TodoItems');
...或CEO
var todoItemsTable = databases.getDatabase('NonMobileSqlDb').tables.getTable('TodoItems');
我已经检查了this question(您可以将Azure移动服务与Azure云服务混合使用吗?)但它似乎不包括与数据库通信的脚本。
一些背景......
移动服务将(按计划)调用执行例行操作的Web服务(具有授权)。我想锁定这项服务(没有ssl),一种方法是生成服务可以使用云服务可以验证的密钥。该密钥将存储在数据库中,既可以访问,也只能在短时间内使用。
答案 0 :(得分:4)
是的,你可以。
您需要使用Node.js中的以下示例(使用how-to guide)进行连接:
要使用node-sqlserver,您必须在应用程序中使用它 指定连接字符串。连接字符串应该是ODBC How to: Get SQL Database connection information中返回的值 本文的一节。代码应该类似于 以下内容:
var sql = require('node-sqlserver');
var conn_str = "Driver={SQL Server Native Client 10.0};Server=tcp:{dbservername}.database.windows.net,1433;Database={database};Uid={username};Pwd={password};Encrypt=yes;Connection Timeout=30;";
可以通过指定Transact-SQL语句来执行查询 查询方法。以下代码创建一个HTTP服务器和 返回Test表中ID,Column1和Column2行的数据 当您查看网页时:
var http = require('http')
var port = process.env.port||3000;
http.createServer(function (req, res) {
sql.query(conn_str, "SELECT * FROM TestTable", function (err, results) {
if (err) {
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.write("Got error :-( " + err);
res.end("");
return;
}
res.writeHead(200, { 'Content-Type': 'text/plain' });
for (var i = 0; i < results.length; i++) {
res.write("ID: " + results[i].ID + " Column1: " + results[i].Column1 + " Column2: " + results[i].Column2);
}
res.end("; Done.");
});
}).listen(port);
非常感谢@GauravMantri&amp; @hhaggan帮助我们做到这一点。