我正在尝试通过以下方式连接到 Google Cloud Bucket
const storage = require('@google-cloud/storage');
const gcs = storage({ //TypeError: storage is not a function
"keyFileName": 'path-to-keyfile.json',
"type": "service_account",
"project_id": <PROJECT_NAME>,
//SOME CREDENTIALS
});
const bucket = gcs.bucket(<BUCKET_NAME>)
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误,即存储不是一个功能。有什么我遗漏的问题吗?
在django REST框架中,身份验证中间件仅在执行视图中间件之后才在请求中设置用户对象,而在此之前执行任何自定义中间件。是否有某种方法可以更改此顺序并在通过身份验证中间件设置用户对象之后执行自定义中间件
作为替代方案,我在中间件本身中创建了用户对象,它可以正常工作,但这只是一个hack。
common.py中定义的中间件是:
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'application.middlewares.IPsBlockerMiddlewareHook',
'application.middlewares.UserMiddleware',
]
Run Code Online (Sandbox Code Playgroud)
有问题的自定义中间件是UserMiddleware。我需要在身份验证后执行它,但事实并非如此
我试图通过SSH连接到远程服务器mongoDB并进行了所提供的配置
import tunnel from 'tunnel-ssh';
const config = {
username: 'username',
Password: 'password',
host: process.env.SSH_SERVER, //192.168.9.104
port: 22,
dstHost: 'localhost',
dstPort: process.env.DESTINATION_PORT, //27017
localHost: '127.0.0.1',
localPort: 27018
};
Run Code Online (Sandbox Code Playgroud)
这是已定义的配置,在这里我需要连接到远程服务器192.168.9.104。因此,将特定的主机选择为SSH主机。提供了相同的用户名和密码。并且建立的连接如下。
class DB {
initDB() {
tunnel(config, (error, server) => {
if (error) {
console.log('SSH connection error: ' + error);
}
const url = 'mongodb://127.0.0.1:27018/myDBname';
mongoose.connect(url, { useNewUrlParser: true });
mongoose.plugin(toJson);
mongoose.plugin(setProperties);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'DB connection error:'));
db.once('open', function() {
console.log('DB connection successful');
});
});
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当调用db.init()函数时,将弹出以下错误消息 …
drf_yasg swagger 生成器不将 TYPE_ARRAY 作为有效参数类型。实现如下
from drf_yasg import openapi
param1 = openapi.Parameter('param_name',
in_=openapi.IN_QUERY,
description='description of param',
type=openapi.TYPE_ARRAY,
required=True
)
Run Code Online (Sandbox Code Playgroud)
而drf_yasg的文档表明它将 openapi.TYPE_ARRAY 作为有效类型。
生成器抛出的错误是
File "/usr/local/lib/python3.6/dist-packages/drf_yasg/codecs.py", line 73, in encode
raise SwaggerValidationError("spec validation failed", errors, spec, self)
drf_yasg.errors.SwaggerValidationError: spec validation failed
Run Code Online (Sandbox Code Playgroud)
是否有一些我遗漏的配置或其他原因,因为 TYPE_STRING,TYPE_NUMBER 工作得很好。
我需要找到非结构化数据集中对象数组中存在的不同键的数量,例如
[{"a":10, b:"20"}, {"a":90, "b":30}, {"b":40, "c":79}, {"b":58, "d":50}]
Run Code Online (Sandbox Code Playgroud)
用例是找到不同的键即 [a, b, c, d]
特定的用例可以使用循环来解决,但有更聪明的方法吗?
Elasticsearch范围聚集将数据汇总到给定范围内,即
*GET /_search*
{
"aggs" : {
"price_ranges" : {
"range" : {
"field" : "price",
"ranges" : [
{ "to" : 100.0 },
{ "from" : 100.0, "to" : 200.0 },
{ "from" : 200.0 }
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但没有提及是否包含值,即存储桶中包含值包含100和200或仅包含$ gt 100和$ lt 200的文档。
以下讨论陈述了类似的疑问,但也没有定论 https://github.com/elastic/elasticsearch/issues/17079
TL:DR 范围聚合是否支持$ lte&$ gte或$ gt&$ lt,并且有一种方法可以根据用例进行聚合吗?
对数组进行排序时,请说:
const arr = ["bad", "good", "all", "ugly"]
Run Code Online (Sandbox Code Playgroud)
使用arr.sort()时,响应趋向于:
arr = ["all", "bad", "good", "ugly"]
Run Code Online (Sandbox Code Playgroud)
但是如果我需要自定义订购,例如:
arr = ["bad", "good", "ugly", "all"]
Run Code Online (Sandbox Code Playgroud)
即,为了示例,您需要将“ all”元素推到排序数组的末尾而不是开始
我所做的是对数组进行排序,然后从数组中删除“所有”元素,仅在最后添加它,即
const a = _.pull(arr, "all");
a.splice(3, 0, "all")
console.log(a) // ["bad", "good", "ugly", "all"]
Run Code Online (Sandbox Code Playgroud)
是否有更好或更简单的方法?