我已经使用Azure-mobile-apps软件包req.azureMobile
在Azure上运行节点服务器。我可以使用module.exports = {
get: asyncMiddleware(async (req, res, next) => {
const deviceTable = req.azureMobile.tables('Devices');
var results = await deviceTable.where(function(date) {
return this.last_active < date
}, new Date(2018,5,5)).read();
res.status(201).send(results);
})
};
从EasyAPI文件中的任何给定表中获取结果:
where
但是如果我想删除 module.exports = {
delete: asyncMiddleware(async (req, res, next) => {
const deviceTable = req.azureMobile.tables('Devices');
await deviceTable.where(function(date) {
return this.last_active < date
}, new Date(2018,5,5)).delete();
res.status(201).send();
})
};
子句的结果怎么办?
list
我已经愚蠢地尝试了上面的方法,但是没有用。我发现azure-mobile-apps的文档很难找到也很难理解。我找到了此页面right here,但这没有告诉我我可以使用的任何内容。
答案 0 :(得分:0)
好的,我想我已经找到答案了,并不完全确定。我尝试了此操作,它似乎完全删除了我要尝试的记录:
module.exports = {
delete: asyncMiddleware(async (req, res, next) => {
const deviceTable = req.azureMobile.tables('Devices');
await deviceTable.delete(deviceTable.where(function(date) {
return this.last_active < date
}, new Date(2018,5,5)));
res.status(201).send();
})
};
恼人的是,当要删除0条记录时,这似乎是错误,这对我来说似乎是意外行为。也许我做错了事...
答案 1 :(得分:0)
我遵循了您的代码,并在我这边测试了以下代码:
req.azureMobile.tables('TodoItem')
.delete(req.azureMobile.tables('TodoItem')
.where(function(id){return this.id ==id;},req.query.id))
.then(results=>{
//res.json(results);
res.status(201).send(results);
})
.catch(next);
在测试上面的代码之前,我为Web应用启用了diagnostics logging,然后在Azure Portal上转到Web应用的“监视>日志流”以查看实时日志。
发送删除请求后,我可以看到如下日志:
2018-07-03T08:59:48.551Z-[35msilly。[39m:执行SQL语句 SELECT * FROM [dbo]。[TodoItem] WHERE([id] = @ p1); DELETE FROM [ dbo]。[TodoItem]位置([id] = @ p1);选择@@ rowcount受影响的AS记录;参数为[{“ name”:“ p1”,“ pos”:1,“ value”:“ 123”}]
以一种简单的方式,我只是转到我的应用程序服务的“移动>简易表格”,发现我之前删除的记录已被完全删除。另外,我尝试通过添加以下附加查询参数__includeDeleted
通过浏览器检索以前的记录:
https://{your-mobile-app}.azurewebsites.net/tables/todoitem/{record-id}?ZUMO-API-VERSION=2.0.0&__includeDeleted=true
注意::如果该记录不存在,那么我将收到404状态代码和以下文本消息:
{
"error": "The item does not exist"
}
根据我的测试,上述过程也可以按以下方式实现:
req.azureMobile.tables('TodoItem')
.delete({id:req.query.id})
.then(results=>{
//res.json(results);
res.status(201).send(results);
});
根据我的测试,上述删除操作将完全删除记录,而不是将deleted
字段设置为true,并且如果记录不存在,那么您将收到404错误。
此外,我检查了是否可以使用execute(statement)来执行自定义SQL语句,即使该记录不存在也是如此。这是代码段,您可以参考它:
var query = {
sql: 'UPDATE TodoItem SET DELETED=1 where id=@id',
parameters: [
{name:'id',value:req.query.id}
]
};
req.azureMobile.data.execute(query).then(function (results) {
res.json(results);
});