Как выполнить хранимую процедуру cosmos db в nodejs?
Я пытаюсь выполнить хранимую процедуру в nodejs. Я использую cosmosclient, и когда я пытался выполнить код, я не могу получить ответ или данные. Вот мой фрагмент кода.
private async executeSprocInternal(sprocName, sprocParams) {
try {
var sprocLink = this.sprocsUrl + '/' + sprocName; //sprocLink:: dbs/testDB/colls/test-container/sprocs/test
var _stdate;
var _partition:any ={} ;
if (conf.partition == true) _partition.partitionKey = 'id';
if (this.showLog == true) _stdate = new Date();
return new Promise((resolve, reject) => {
this.container.scripts.storedProcedure(sprocName).execute(sprocLink,sprocParams,_partition).then((results) =>{
if (this.showLog == true) {
console.log('Completed Proc ', sprocName, ' in ', ((new Date()).getTime() - _stdate.getTime()), ' msec');
}
resolve(results);
})
.catch((error) =>{
console.log("exequeryerror")
reject(error)
})
});
} catch (e) {
console.log(2,e)
return new Promise((resolve, reject) => {
reject(e);
});
}
}
Спасибо за помощь.
Ответы
Согласно документации API , sprocLink нельзя передавать.
функция execute (partitionKey: any, params ?: any [], options ?: RequestOptions)
Кроме того, вам необходимо передать значение вашего ключа раздела (я думаю, что id - это ваш ключ раздела).
Я пробовал это, и он может работать нормально, вы можете попробовать:
async function executeSprocInternal(sprocName, sprocParams) {
try {
var sprocLink = 'dbs/Test/colls/data/sprocs' + '/' + sprocName;//sprocLink:: dbs/testDB/colls/test-container/sprocs/test
var _stdate = new Date();;
var partitionKey = 'fruit';
return new Promise((resolve, reject) => {
container.scripts.storedProcedure(sprocName).execute(partitionKey,sprocParams).then((results) => {
console.log('Completed Proc ', sprocName, ' in ', ((new Date()).getTime() - _stdate.getTime()), ' msec');
resolve(results);
})
.catch((error) => {
console.log("exequeryerror")
reject(error)
})
});
} catch (e) {
console.log(2, e)
return new Promise((resolve, reject) => {
reject(e);
});
}
}
executeSprocInternal("getData", "success").then((message) => {console.log(message);})
Надеюсь, это поможет тебе.
Обновить
Вот мой образец:
Как показано на скриншоте, /categoryэто мой путь ключа раздела, fruitэто значение моего ключа раздела. Вам просто нужно передать "фрукт" в executeметод, например:
container.scripts.storedProcedure(sprocName).execute("fruit",sprocParams)