我正在尝试使用Azure的DocumentDb来验证登录的用户凭据,但我无法获得正确的结果。
一些要点: 1.这是一个分区集合,我正在传递分区键。 2.我传递一个数组作为参数。
这是我调用程序的代码:
response = await client.ExecuteStoredProcedureAsync<string>(storedProcedurelink, new RequestOptions { PartitionKey = new PartitionKey(partitionKey) }, new dynamic[]{param});
这是我的程序代码:
function sample(param) {
var collection = getContext().getCollection();
var query = 'SELECT * FROM c where c.logindata.email="'+param[0]+'" and c.logindata.password="'+param[1]+'" and c.userid>0';
// Query documents and take 1st item.
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
query,
function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) getContext().getResponse().setBody('no docs found');
else getContext().getResponse().setBody(JSON.stringify(feed));
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
我能够在查询资源管理器中执行查询并获得正确的结果,但是当我调用该过程时,它总是给出no docs found
。我不知道我做错了什么,有人能指出我正确的方向。
答案 0 :(得分:0)
我不知道我做错了什么。
由于param[0]
和param[1]
无法在商店流程中获得结果。我们可以在Azure门户网站上对其进行测试。
有人能指出我正确的方向。
请尝试在您的情况下使用2个参数。
function sample(email,password) {
var collection = getContext().getCollection();
var query = 'SELECT * FROM c where c.logindata.email="'+email+'" and c.logindata.password="'+password+'" and c.userid>0';
// Query documents and take 1st item.
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
query,
function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) getContext().getResponse().setBody('no docs found');
else getContext().getResponse().setBody(JSON.stringify(feed));
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
确保我们可以从Azure Portal脚本浏览器中获得预期的结果。
在C#代码中
var user = "xxxxx";
var password = "xxxx";
var response = await client.ExecuteStoredProcedureAsync<string>(storedProcedurelink, new RequestOptions { PartitionKey = new PartitionKey(partitionKey) },user,password);