我目前正在使用NodeJS通过AWS Api Gateway在AWS lambda上构建机器人,我遇到了POST请求和JSON数据的问题.我的api使用'使用Lambda代理集成',甚至当我测试代理发送内容类型的Application/json和一些json在体内时,例如{"foo":"bar"}我无法访问该对象而不先解析它
例如
var json = JSON.parse(event.body);
console.log(json.foo);
Run Code Online (Sandbox Code Playgroud)
现在我知道通过JSON.parse运行它似乎并不是什么大不了的事,但我已经看到了许多其他例子,根本不是这种情况.请看这里https://github.com/pinzler/fb-messenger-bot-aws-lambda/blob/master/index.js
我是否需要向API网关添加任何内容才能正确处理?'post method request'部分中的'request body'步骤具有针对请求主体的内容类型application/json设置.
据我所知,上面例子的自述文件似乎没有使用代理集成,所以我不确定我应该在这里做什么
我正在使用PhalconPHP,到目前为止我没有遇到什么问题.
框架非常好.
但是,我遇到了一个我无法解决的问题.这可能是一件非常简单的事情,但我一直在圈子里跑,并且找不到任何关于这个问题的参考.
问题是,如果我还更新相关实体,我无法更新模型对象.
例如,假设我有几个模型类.
联系:
class Contact extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->belongsTo('email_id', 'Email', 'id', ['alias' => 'Email']);
}
}
Run Code Online (Sandbox Code Playgroud)
和电子邮件:
class Email extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->hasMany('id', 'Contact', 'email_id', ['alias' => 'Contacts']);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试创建一个新的Contact和Email以下的作品时:
$contact = new Contact();
// ... assign other fields here (i.e. name)
$email = new Email();
// ... assign other email fields here (i.e. address)
$contact->setEmail($email); // or $contact->email = $email;
$contact->save(); …Run Code Online (Sandbox Code Playgroud) 标题有点冗长,但我会尽力解释我想做什么。基本上我有很多数组想要组合成一个数组。问题是,我需要循环子数组中的项目并一次添加 1 项并保持顺序。最终目标是我想显示分页的数据。下面我有一个简单的例子,我将用它来尝试表达我的意思。这不是按字母顺序排序,即在底部示例中h不应该在i之前。
所以在我的例子中,我知道我想要 3 页的结果。第一页应该有 4 个项目,第二页有 4 个项目,第三页只有 1 个项目。
我可以自己进行最后的分页,因为我将在其“ mix ”末尾有一个包含所有内部项目的数组,但我无法弄清楚如何循环遍历我的数组并按照我需要的方式添加它们。
我已经预先获得了页面变量,但我不确定如何构建循环。我想我基本上需要循环遍历每个子数组并 pop() 第一项,然后循环下一个,pop() 第一项,依此类推。但在某个地方我需要检查每个子数组中还剩下多少项。
例如,如果我只有数组“one”,理论上我会有 2 页,第一个包含 a、c、e、i,第二个仅包含 k,这显然很简单,因为我只检查唯一数组的长度。
但是如果我在另一个数组“third”[1,2,3,4,5]中添加,那么我期望混合数组为['a','b',1,'c','d',2 ...ETC]; 理论上,每个数组都可以有不同的长度,所以我显然会跳过一个空值。
var one = ['a','c','e','i','k'];
var two = ['b','d','f','h'];
var all = [one,two];
var pagecount = 3;
var mix = [];
for(var i = 0; i< all.length; i++){
var area = all[i];
}
// End result should be mix = ['a','b','c','d','e','f','i','h','k'];
Run Code Online (Sandbox Code Playgroud)
我已经尽力用最好的语言来表达这一点,但我正在努力思考如何自己解释这一点!不幸的是,在现实世界中,我无法控制数据数组的数据/大小。
如有任何疑问或不清楚的地方,请发表评论。
我目前正在构建一个接受 URL 的共享扩展。作为其中的一部分,我按照上一个问题的概述自定义了我的共享屏幕,以创建一个全屏视图控制器。这一切正常。然而,在默认的共享编辑器视图中,我注意到有一个网页的预览图像。我试图在我的扩展程序中访问它,但我似乎无法掌握它。
具体来说,我一直在尝试使用该方法
loadPreviewImage
https://developer.apple.com/reference/foundation/nsitemprovider/1403925-loadpreviewimage
您会在文档中注意到,对于完成处理程序,这说明了以下内容
completion?Handler 一个完成处理程序块,用于执行结果。此块的第一个参数必须是 NSData、NSURL、UIImage(在 iOS 中)或 NSImage(在 macOS 中)类型的参数,用于接收图像数据。有关实现块的更多信息,请参阅 Completion?Handler。
但是,如果我尝试在完成块中将其设置为 UIImage,则会出现错误
无法将 '(UIImage, _) -> ()' 类型的值转换为预期的参数类型 'NSItemProvider.CompletionHandler!'
通过保护语句确认 itemProvider 是 NSItemProvider 实例的示例代码
itemProvider.loadPreviewImage(options: nil) { (image: UIImage, error) in
}
Run Code Online (Sandbox Code Playgroud)
完成处理程序的文档说将其设置为您想要的类型,它会尝试将数据强制为您指定的类型。有没有人见过这个?我不知道在这里做什么,因为我看不到我做错了什么。
https://developer.apple.com/reference/foundation/nsitemprovider/completionhandler
如果所有其他方法都失败了,我会考虑使用一些 Javascript 从 dom 中获取图像,但我会喜欢 Apple 似乎提供的预览图像
我目前正在尝试在完美的服务器端 Swift 项目上使用 Swift 包管理器,但是当我运行Swift package update它时,它永远不会解决。使用详细标志,它似乎会一遍又一遍地循环遍历相同的依赖项。
我认为问题开始的地方是我正在尝试创建一个自定义包以导入到我的项目中。我正在尝试以一种可以将其导入其他项目的方式构建包。问题是我的包本身依赖于完美的依赖项之一。如果我从整个项目包中删除我的自定义包,则依赖项下载成功。所以我只能假设是我的包裹有问题。
我的包的依赖项如下所示
let package = Package(
name: "TestPackage",
products: [
// Products define the executables and libraries produced by a package, and make them visible to other packages.
.library(
name: "TestPackage",
targets: ["TestPackage"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
.Package(url: "https://github.com/PerfectlySoft/Perfect-HTTP.git", majorVersion: 3),
],
targets: [
// Targets are the basic building blocks of a package. …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个 iOS 应用程序,该应用程序需要写入登录用户拥有的谷歌表。
要登录我正在使用GoogleSignInpod的用户,并附加到我正在使用GoogleAPIClientForREST/Sheetspod的 google 工作表。
我可以让用户正常登录,但在我的一生中,由于身份验证错误,我似乎无法写入工作表。我在 SO 上找到的每个示例(例如使用 Google SpreadSheet API 更新 iOS Swift 中的特定行)等都声明使用fetcherAuthorizer()当前用户的方法并将其分配给service.authorizer,但是这甚至不会编译并出现以下错误value of type 'GIDAuthentication?' has no member 'fetcherAuthorizer'
所以对于我的 podfile 我有:
pod 'GoogleSignIn'
pod 'GoogleAPIClientForREST/Sheets'
Run Code Online (Sandbox Code Playgroud)
我的AppDelegate didFinishLaunchingWithOptions有以下几点:
GIDSignIn.sharedInstance().clientID = "clientIdHere"
GIDSignIn.sharedInstance()?.scopes.append(kGTLRAuthScopeSheetsSpreadsheets)
GIDSignIn.sharedInstance()?.scopes.append(kGTLRAuthScopeSheetsDrive)
GIDSignIn.sharedInstance()?.delegate = self
Run Code Online (Sandbox Code Playgroud)
当我尝试写入工作表时,我使用:
let service = GTLRSheetsService()
// following line errors with authorizer not being a property of the service
//variable and fetchAuthorizer() not being a method …Run Code Online (Sandbox Code Playgroud) 我正在使用 Docker,遇到了一个问题,每当我尝试访问我的容器时,我都会收到一条“连接已重置”消息。我读过各种其他讨论使用bind选项的文章。但我发现更令人困惑的是,如果我遵循 docker 的“入门”教程,它就可以成功连接。
“入门”教程中的基本 Dockerfile 如下:
FROM node:12-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
Run Code Online (Sandbox Code Playgroud)
它不使用EXPOSE任何地方来指定端口,但我通过查看src/index.js此信息知道侦听端口 3000
现在我的应用程序的 docker 文件如下所示:
FROM node:12-alpine
WORKDIR /hapi
COPY . .
RUN yarn install --production
CMD ["node", "server.js"]
Run Code Online (Sandbox Code Playgroud)
我的 server.js 代码如下:(直接从他们的文档中提取)
'use strict';
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 3000,
host: 'localhost'
});
server.route({
method: 'GET',
path: '/',
handler: (request, h) => …Run Code Online (Sandbox Code Playgroud) 因此,最近我一直在考虑在UIColor扩展中定义一些自定义颜色,但是我已经看到了各种实现方法。是否有关于此的最佳实践记录在任何地方?
例如,我已经看到了这两种方式:
extension UIColor {
static let myColor = UIColor(colorLiteralRed: 1, green: 1, blue: 1, alpha: 1)
}
//called like UIColor.myColor
Run Code Online (Sandbox Code Playgroud)
要么
extension UIColor {
static var myColor: UIColor {
return UIColor(red:1, green:1, blue:1, alpha:1.0)
}
}
//called like UIColor.myColor
Run Code Online (Sandbox Code Playgroud)
这里有基于非观点的最佳实践吗?还是只是出于个人喜好?(我知道示例中的颜色实际上不是自定义的:D)
我知道如何创建iOS共享扩展,但我无法弄清楚是否有一种方法可以使其成为全屏,例如Action扩展?
Pinterest似乎这样做,但我不确定如何.
Action扩展的文档说使用:
<key>NSExtensionActionWantsFullScreenPresentation</key>
<true/>
Run Code Online (Sandbox Code Playgroud)
在扩展名的plist文件中,但这似乎在Share扩展中没有效果?
反正有没有完成这个?
我有一个来自 firestore 数据库的 bigquery 导入,我想在其中查询文档中的特定字段。这是通过 firestore-bigquery 扩展填充的,文档数据存储为 JSON 字符串。
我试图在我的查询中使用 WHERE 子句,该子句使用 JSON 数据中的字段之一。但是,这似乎不起作用。
我的查询如下:
SELECT json_extract(data,'$.title') as title,p
FROM `table`
left join unnest(json_extract_array(data, '$.tags')) as p
where json_extract(data,'$.title') = 'technology'
Run Code Online (Sandbox Code Playgroud)
data是 JSON 对象,title是所有项目的属性。上面的查询将运行,但会产生“无结果”(当它们出现在表格预览中时,肯定有相关标题的结果)。
我也尝试过使用WHERE title = 'technology',但这会返回一个错误,该错误title是一个无法识别的字段(因此是 json_extract)。
根据我的研究,这应该可以作为标准的 SQL JSON 查询,但似乎不适用于 Bigquery。有谁知道解决这个问题的方法?
我能想到的是,如果我将结果放在另一个表中,但我不知道这是否是一个可行的解决方案,因为数据是通过更新时的扩展更新的,所以我也需要不断刷新我的第二个表.
编辑 我想知道配置视图是否有助于解决这个问题?虽然最终我想根据不同的参数查询这个,这里的文档https://cloud.google.com/bigquery/docs/views建议你不能在视图中引用查询参数
ios ×3
swift ×3
arrays ×1
aws-lambda ×1
docker ×1
javascript ×1
orm ×1
phalcon ×1
php ×1
uicolor ×1