小编Pat*_*und的帖子

GraphQL Dataloader事先不知道键

Dataloader能够批处理和缓存请求,但只能通过调用load(key)或loadMany(keys)来使用。

我遇到的问题是,有时我不知道它们是我要预先加载的项目的键。

我使用的是sql数据库,当当前对象具有与另一个模型的belongsTo关系中的外键时,此方法工作正常。

例如,一个用户属于一个组,因此具有一个groupId。要解析该组,您只需调用groupLoader.load(groupId)。

另一方面,如果我想解析一个组中的用户,那么其中可能会有很多我想要一个查询,例如

SELECT * from users where user.groupId = theParticularGroupId
Run Code Online (Sandbox Code Playgroud)

但是这样的查询不使用用户的键,因此我不确定如何使用数据加载器。

我可以再次请求以获取诸如

SELECT id from users where user.groupId = theParticularGroupId
Run Code Online (Sandbox Code Playgroud)

然后使用这些键调用loadMany ...但是我可以直接直接请求数据。

我注意到,数据加载器具有一个prime(key,value)函数,该函数可用于启动缓存,但是只有在数据已被获取后才能执行。届时许多查询将已经发送,并且重复的数据可能已经被获取。


另一个示例将是以下查询

query {
  groups(limit: 10) {
    id
    ...
    users {
      id
      name
      ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我要搜索前10个组或最后10个组,则无法知道按键。然后,一旦我有这10个小组。我不知道他们用户的密钥,以及每个解析器是否会使用查询来解析用户,例如

SELECT * from users where user.groupId = theParticularGroupId
Run Code Online (Sandbox Code Playgroud)

该查询将被执行10次。加载数据后,我现在可以准备缓存,但是已经发出了10个请求。

有什么办法解决这个问题?也许不同的模式或数据库结构,或者数据加载器甚至都不是正确的解决方案。

javascript caching batching node.js graphql

6
推荐指数
1
解决办法
984
查看次数

在本地开发服务器上运行时,预付示例不起作用

TL; DR:是否可以使用Prebid.js v1.6.0和本地运行的Web服务器测试Prebid标头出价?

我创建了一个库,用于将Prebid标题出价集成到使用React构建的Web应用程序中.它使用Prebid 0.34.6工作正常,我在生产中成功使用它.

我现在正在迁移我的库以使用最新版本的Prebid,1.6.0.我仔细地遵循了迁移指南并实施了那里概述的所有变更.

为了测试我的代码,我设置了一个在本地开发服务器上运行的演示应用程序.

在应用程序的调试输出中,我可以看到收到的出价(日志说INFO: Bids Received for Auction with id: aa5d34f4-3eb7-4cb0-a756-6f7cc4a18568).

但是,广告位中不会显示任何广告素材.我的bidBackHandler回调函数接收一个空对象作为参数.当我pbjs.getAdserverTargeting()在浏览器的开发者控制台上调用时,我也得到一个空对象.

Prebid示例页面上,显示了一个基本的Prebid.js示例,用于将Prebid集成到网页中,以及JSFiddle.

我在演示应用程序中使用与小提琴中完全相同的单位和GPT配置,但无济于事 - 广告位中没有广告素材,只有"自家广告"后备广告,对出价退款处理程序的空回复,空广告服务器定位.

然后我发现如果我将基本Prebid.js示例中的代码复制到我本地开发服务器上的HTML页面,它也会以同样的方式失败 - 广告位中没有广告素材,只有"自家广告"回退,空回复到出价退款处理程序,空广告服务器定位.

然后我用我的演示创建了一个沙箱(→ https://codesandbox.io/s/k5w8mr9o23),在那里,我得到了所需的结果,显示了演示创意.

似乎使用Prebid 1.x,在localhost上运行时无法填充广告位.

谁能证实这一点?有没有办法让这项工作?

javascript ads double-click-advertising prebid.js

6
推荐指数
1
解决办法
570
查看次数

如何在请求承诺中制作UTF-8?

在请求之后,我向变音符号提出了Request-Promise请求:

var file = rp({uri: serviceURL, encoding: 'utf8'}).forEach(function (polizeistelle) {
    console.log(polizeistelle)
}
Run Code Online (Sandbox Code Playgroud)

在控制台日志中它显示'pr si'而不是'präsi'

感谢帮助

utf-8 node.js

5
推荐指数
1
解决办法
2739
查看次数

"未捕获错误:关键字if已定义"使用ajv-keywords

我正在尝试使用ajv-keywords中的 if/then/else关键字创建条件验证,但是我在浏览器控制台中收到以下错误:"未捕获错误:关键字如果已定义".

我究竟做错了什么?

import * as ajvErrors from 'ajv-errors';
import * as ajvKeywords from 'ajv-keywords';

const ajv = new Ajv({ allErrors: true, jsonPointers: true });
ajvErrors(ajv);
ajvKeywords(ajv);

const schema = {
  if: {
    properties: {
      fundraiser: { type: 'string' }
    }
  },
  then: {
    required: ['title'],
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript ajv

5
推荐指数
0
解决办法
199
查看次数

仅当元素后跟文本时,如何在元素后添加边距

我的页面上有按钮,有时带有图标图像和文本标签,有时仅带有图标,没有文本。

我对按钮中的图像进行了样式设置,以便右侧有一个边距,以将图标与文本分开。

问题是,由于该边距,如果按钮中没有文本,则图标不会位于按钮的中心,因此看起来很糟糕。

在此输入图像描述

button {
  border: none;
  border-radius: 0.5rem;
  background-color: pink;
  line-height: 32px;
  font-size: 1rem;
  padding: 0.5rem;
}

button > img {
  float: left;
  margin-right: 0.5rem;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <p>
    This looks OK:
  </p>
  <button>
    <img src="https://cdn2.iconfinder.com/data/icons/ios-7-icons/50/star-32.png"> OK
  </button>
</div>
<div>
  <p>
    This doesn't (icon not in the center of the button):
  </p>
  <button>
    <img src="https://cdn2.iconfinder.com/data/icons/ios-7-icons/50/star-32.png">
  </button>
</div>
Run Code Online (Sandbox Code Playgroud)

(参见小提琴

一个简单而明显的修复方法是将文本放入 span 元素中,然后使用:only-child设置图像元素的样式。

但随后我必须更改代码库中已经使用这种样式的很多地方,并且我必须以某种方式说服我的开发人员同事始终将他们的按钮标签放在 span 元素中,只是为了使没有文本标签的按钮看起来不错。

有没有另一种方法可以让我保持 HTML 代码不变,同时去掉图像上没有文本的边距?

我尝试过使用:not:empty伪类选择器进行实验,但无法使其工作。问题是您无法选择纯文本节点或设置其样式。

html css

5
推荐指数
1
解决办法
2801
查看次数

无法将文件读取流从 Google Cloud Storage 传输到 Google Drive API

我正在做一个项目,我正在从 Google Drive读取用SimpleMind创建的思维导图文件,修改文件,然后将它们上传回 Google Drive。

SimpleMind 创建的 SMMX 文件是包含 XML 文件和媒体文件的 zip 文件。

我的程序在本地运行时运行良好,我对思维导图所做的更改显示在 SimpleMind 中。

我现在想使用 App Engine 在 Google Cloud Platform 上运行该程序。

由于安全限制,我不能只将我从 Google Drive 下载的文件写入云端应用服务器的文件系统。相反,我创建了一个存储桶来存储文件。

然而,当我这样做时,我的文件被损坏,在我运行我的程序后,它不是 zip 文件内容,而是一个 JSON 文件,显然是读取流的字符串表示。

在本地运行 - 工作

这是我的代码的简化版本,没有对 zip 文件进行实际修改,我将其排除在外,因为它与问题以及任何错误处理无关 - 从来没有任何错误。

当我在本地运行代码时,我使用写流和读流在本地文件系统上保存和加载文件:

#!/usr/bin/env node

const { readFileSync, createReadStream, createWriteStream } = require('fs');
const { google } = require('googleapis');

const tokenPath = 'google-drive-token.json';
const clientId = 'xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com';
const redirectUri = 'urn:ietf:wg:oauth:2.0:oob';
const clientSecret = 'xxxxxxxxxxxxxxxxxxxxxxxx';
const fileId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; …
Run Code Online (Sandbox Code Playgroud)

google-app-engine node.js google-drive-api google-cloud-platform

5
推荐指数
1
解决办法
2311
查看次数

"npm install" fails when there is a git package dependancy on macOS Catalina

When running “npm install” on a Node.js project which has a Git dependency, it fails on macOS Catalina.

npm ERR! code EPERM
npm ERR! syscall spawn
npm ERR! errno EPERM
npm ERR! Error: spawn EPERM
npm ERR!     at ChildProcess.spawn (internal/child_process.js:394:11)
npm ERR!     at Object.spawn (child_process.js:540:9)
npm ERR!     at /Users/user/.node/lib/node_modules/npm/node_modules/pacote/lib/util/git.js:216:24
npm ERR!     at /Users/user/.node/lib/node_modules/npm/node_modules/promise-retry/index.js:29:24
npm ERR!  OperationalError: spawn EPERM
npm ERR!     at ChildProcess.spawn (internal/child_process.js:394:11)
npm ERR!     at Object.spawn (child_process.js:540:9)
npm ERR!     at /Users/user/.node/lib/node_modules/npm/node_modules/pacote/lib/util/git.js:216:24
npm ERR!     at /Users/user/.node/lib/node_modules/npm/node_modules/promise-retry/index.js:29:24 {
npm ERR!   cause: …
Run Code Online (Sandbox Code Playgroud)

macos node.js npm npm-install macos-catalina

5
推荐指数
1
解决办法
344
查看次数

JavaScript - 替换为英文编号

我想将孟加拉语数字替换为英语数字.如

 var bengali = [?,?,?,?,?,?,?,?,?,?];
 var eng = [0,1,2,3,4,5,6,7,8,9];
Run Code Online (Sandbox Code Playgroud)

bengali.replace(eng);

所以任何人都可以写任何bengali数字,然后将其转换为英文数字.我怎样才能做到这一点?

javascript

4
推荐指数
2
解决办法
1261
查看次数

使用Node的Jest测试-超时-在jest.setTimeout指定的5000ms超时内未调用异步回调

我开始使用Jest测试我的代码,但我无法通过看似简单的测试。我只是想检查我从Maogoose数据库请求中收到的内容是否是一个对象。

该功能fetchPosts()有效,因为我将其与React前端连接在一起,并且可以正确显示数据。

这是我的功能fetchPosts()

module.exports = {
    fetchPosts() {
        return new Promise((resolve, reject) => {
            Posts.find({}).then(posts => {
                if (posts) {
                    resolve(posts)
                } else {
                    reject()
                }
            })
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

而我的测试:

it('should get a list of posts', function() {
    return posts.fetchPosts().then(result => {
        expect(typeof result).toBe('object')
    })
})
Run Code Online (Sandbox Code Playgroud)

这使测试失败,Jest说

' 超时-在jest.setTimeout指定的5000ms超时内未调用异步回调。'

问题:如何使该测试通过?

javascript node.js reactjs jestjs

4
推荐指数
1
解决办法
5810
查看次数

如何防止Node.js 12辅助线程立即终止?

我有一个运行Express服务器的Node.js应用程序和一个定期执行某些操作的工作线程

当服务器停止时,我需要清理与工作线程启动时打开的外部系统的连接。

我试图在进程上为SIGTERM和SIGINT信号添加一个处理程序,但这没有用,工作线程中的处理程序函数未调用,当父进程接收到SIGINT或SIGTERM时,它会立即以退出代码1退出。父进程也有这些其中的处理程序被调用。

这是重现此问题的简单代码示例:

start.js

const http = require("http");
const express = require("express");
const path = require("path");
const { Worker } = require("worker_threads");

let myWorker = null;

process.on("SIGTERM", stop);
process.on("SIGINT", stop);

const app = express();
const server = http.Server(app);

myWorker = new Worker(path.join(__dirname, "./worker.js"));

myWorker.on("exit", code => console.info(`Worker exited with code ${code}`));

server.listen(3000);

function stop() {
  console.log("Main process: stop()");
  process.exit(0);
}
Run Code Online (Sandbox Code Playgroud)

worker.js

process.on("SIGTERM", stop);
process.on("SIGINT", stop);

setInterval(() => console.log("beep"), 1000);

function stop() {
  console.log("Worker process: stop()"); …
Run Code Online (Sandbox Code Playgroud)

javascript multithreading worker-thread node.js

4
推荐指数
1
解决办法
230
查看次数