小编Ole*_*ter的帖子

使用 MailApp.sendEmail 时电子邮件被拒绝

我有问题MailApp.sendEmail()。我尝试通过 Google 电子表格中的脚本发送电子邮件。我的脚本适用于我的帐户,但不适用于我朋友的帐户。我收到这条消息:

消息被拒绝。有关详细信息,请参阅https://support.google.com/mail/answer/69585。最终收件人:rfc822;xx@xx.xx 操作:失败状态:5.0.0 诊断代码:smtp;消息被拒绝。有关详细信息,请参阅https://support.google.com/mail/answer/69585。上次尝试日期:2018 年 3 月 21 日星期三 05:41:31 -0700 (PDT)

我使用了 Martin Hawksey 教程脚本(经过一些修改):

var TO_ADDRESS = "xxx@gmail.com";

// spit out all the keys/values from the form in HTML for email
function formatHtmlMailBody(obj, order) {
    var result = "html text";
    // loop over all keys in the ordered form data
    for (var idx in order) {
        var key = order[idx];
        result += key + " " + obj[key];
    }
    return …
Run Code Online (Sandbox Code Playgroud)

email google-apps-script gmail-api

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

如何在 TypeScript 中仅导出/导入类型定义

如何独立于模块本身导出和导入类型定义。

在 flowtype 中,这看起来像这样:文件使用sub.js导出类型,文件使用使用导入类型myTypeexport type myType = {id: number};main.jsimport type {myType} from './sub.js';

typescript type-only-import-export

6
推荐指数
2
解决办法
7539
查看次数

google.script.run.withSuccessHandler 不返回值

这让我抓狂,代码昨天还可以工作,但现在不行了。我尝试再次检查所有语法,但问题仍然存在。来自 Google 表格的此服务器端请求在服务器端显示值 ( Logger.log()),但null在客户端返回。

function supervisorLine(lineData) {
  if (lineData == 'Name Value is not VALID!') {
    console.log("Supervisor Name Issue!");
  } else {
    document.getElementById('Team').value = lineData[7];
    document.getElementById('Shift').value = lineData[12];
    document.getElementById('action').classList.remove("disabled");
    console.log("team " + lineData[7] + " shift " + lineData[12]);
    ////////////////////////////////// need to be Moved somewhere after password check!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    google.script.run.withSuccessHandler(function(quickStat2) {
      console.log(quickStat2)
    }).loginRecords(lineData[7], lineData[12]);
  }
}
Run Code Online (Sandbox Code Playgroud)

这也是我的服务器端代码:

function loginRecords(team, shift) {
  var sh = ss.getSheetByName("Attn Rec");
  var result = [];
  var matchRec = sh.getRange("a2:l" + sh.getLastRow()).getValues().filter(function(a) { …
Run Code Online (Sandbox Code Playgroud)

javascript web-applications google-sheets google-apps-script

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

JavaScript 在数组中展开语法的时间复杂度是多少?

我想知道在 JavaScript 中使用带有数组的 spread 的时间复杂度是多少。它是线性 O(n) 还是常数 O(1)?

下面的语法示例:

let lar = Math.max(...nums)
Run Code Online (Sandbox Code Playgroud)

javascript arrays time-complexity spread

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

如何在 Heroku 上运行两个服务器?

我在 Angular 9 中构建了一个项目作为前端,Node.js 作为后端服务器。

现在我正在node appserver.js运行后端服务器。默认情况下侦听端口 9090。在另一个终端中,我ng serve像往常一样在端口 4200 上运行我的 Angular 应用程序。我在 Angular 应用程序中有一项服务,可以从服务器发送和接收消息。

我已经使用WebSocket类连接到端口 9090。我的应用程序在本地运行良好。但现在我如何在 Heroku 中部署。Heroku 给出一个随机端口号,将指定为process.env.PORT。我怎样才能在我的 WebSocket 服务中获取该端口?

我的问题是:

  1. 如何在Heroku中部署两台服务器?
  2. 如何将 appserver.js 中的端口号指定为 Angular 中 WebSocket 服务的端口号?
  3. 是否可以使用 .env 文件和 ProcFile 来解决我的问题?
  4. 是否可以使用 Heroku 中的 multi-buildpack 来解决我的问题?

heroku websocket node.js heroku-api angular

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

如何解决 Google Apps Script 开发中的常见错误

问答目前是讨论的主题,请参与。目前的计划是在可能的情况下拆分为问答环节。A&A 的答案是社区维基,当状态得到解决时,问题应该成为一个问题。


前言

本问答力求成为Google Apps Script语言开发过程中遇到的常见错误的集合和参考对象,以期提高标签的长期可维护性。

在其他语言和通用标签中也有几个类似的成功经历(参见c++androidphpphp 再次),这一个也紧随其后。


它为什么存在?

新老开发人员提出的关于开发和生产过程中遇到的错误的含义和解决方案的问题数量很多,这些问题可以有效地简化为一个单一的答案。在撰写本文时,即使仅通过语言标签运行查询也会产生:

  • “找不到方法” 8页
  • “无法读取属性” 9 页
  • “在这种情况下无法调用 ...” 5 页
  • “您没有权限” 11页

由于需要考虑细微差别和通常措辞不当的标题,对于志愿者来说,链接到最相关的副本既困难又耗时。


它由什么组成?

此问答包含的条目旨在提供有关如何:

  • 解析错误信息结构
  • 了解错误意味着什么
  • 始终如一地重现(如适用)
  • 解决问题
  • 提供规范问答的链接(在可能的情况下)

目录

为了帮助您浏览不断增长的参考,请使用下面的目录:

  1. 一般错误
  2. 特定于服务的错误

这不是什么?

问答的范围仅限于普通(非平凡)。这不是:

  • 一个包罗万象的指南或“最佳实践”集合
  • 一般 ECMAScript 错误的参考
  • 气体文件
  • 资源列表(我们有一个标签维基

要添加什么?

添加条目时,请考虑以下事项:

  • 错误是否足够常见(参见“为什么”部分的示例)?
  • 该解决方案能否简明扼要地描述并适用于大多数情况?

debugging google-api google-apps-script google-apps-script-addon

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

使用 CLASP 测试 GAS 时如何模拟依赖项

背景

我最近了解了CLASP,并对使用TDD在本地编辑我的Google Apps 脚本(GAS)的可能性感到兴奋。

注意:可能有一种方法可以使用现有的 GAS 编辑器编写测试,但如果可能的话,我更愿意使用现代编辑器

clasp 效果很好,但我不知道如何模拟单元测试的依赖项(主要是通过jest,尽管我很高兴使用任何有效的工具)

  • 我通过使用gas-local包获得了最远的距离,并且能够在测试中模拟单个依赖项
    • 但是我找不到在单个测试/调用中模拟多个依赖项的方法,所以我创建了这个问题

挑战

尽管安装了@types/google-apps-script,但我不清楚如何分别“要求”或“导入”Google Apps Script 模块是使用 ES5 还是 ES2015 语法——请参见下面的说明。

相关的 StackOverflow 帖子

虽然在测试单元中的相似,所以问题在这里,大部分的内容/评论似乎是从预扣时代,我无法在一个解决方案,同时跟进余下的引线到达。(当然,我未经训练的眼睛很可能漏掉了一些东西!)。

尝试

使用gas-local

正如我上面提到的,在使用 gas-local 时尝试模拟多个依赖项后,我创建了一个问题(见上面的链接)。我的配置类似于jest.mock我在下面描述的测试,但值得注意的是以下差异:

  • 我使用 ES5 语法进行gas-local测试
  • 我的包配置可能略有不同

使用 jest.mock

LedgerScripts.test.js

import { getSummaryHTML } from "./LedgerScripts.js";
import { SpreadsheetApp } from '../node_modules/@types/google-apps-script/google-apps-script.spreadsheet';

test('test a thing', () => {
    jest.mock('SpreadSheetApp', () => {
        return jest.fn().mockImplementation(() …
Run Code Online (Sandbox Code Playgroud)

tdd unit-testing google-apps-script jestjs clasp

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

如果当前运行时支持,请使用顶级等待

顶级等待支持已在 14.3.0 via--experimental-top-level-await和更高版本中添加到 Node.js 中--harmony-top-level-await

问题

如果当前 Node.js 运行时支持,我需要在 ESM 脚本文件中使用顶级等待。此外,我需要设置一个布尔标志来指示在顶层成功等待了承诺。

我的意思的一个例子:

let topLevelAwaitEnabled;
try {
    await Promise.resolve(); // replaced with an actual promise
    topLevelAwaitEnabled = true;
} catch (ignored) {
    topLevelAwaitEnabled = false;
}
console.log(topLevelAwaitEnabled);

// carry on with the rest of the application, regardless of success or failure
// at some point, topLevelAwaitEnabled is checked to conditionally execute some code
Run Code Online (Sandbox Code Playgroud)

如果启用了顶级等待支持,则可以很好地成功。但是,如果不支持,这将导致解析期间出现以下错误,并且无法在运行时try/捕获catch

$ node test.js...\test.js:3 …
Run Code Online (Sandbox Code Playgroud)

node.js async-await top-level-await

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

早期提案可以用在 TypeScript 中吗?

我想在 TypeScript 代码库中使用提案do 表达式。

是否可能?如果可以,我应该如何配置 TypeScript?

typescript

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

Jest 似乎不理解“导入类型”

我们最近将单一存储库更新为:

  • 恩克斯14.3.6
  • 角度 14.0.3
  • 开玩笑 28.1.1
  • 打字稿 4.7.4

升级后编译成功,但在运行时我们遇到了很多错误,例如“ emitDecoratorMetadata通过引用带有命名空间的仅类型导入导致运行时错误”(https://github.com/microsoft/TypeScript/issues/42624)。ESLint 也报告了此错误。

我们通过(对于所有类型和接口)将所有“ import ”语句替换为“ import type ”语句来解决这个问题。这修复了运行时错误并且应用程序再次运行。为了修复 ESLint 错误,我们还必须安装并使用“eslint-plugin-import”扩展。

到目前为止一切顺利,但现在我们的测试停止工作了。看来 Jest 不理解“导入类型”声明。 在使用“导入类型”的类的每个单元测试中,测试都会失败并出现以下错误:

ReferenceError:Zyz 未定义

(其中 xyz 是测试类中的导入类型,例如

// some-component.ts
import type { Xyz } from '...';
...
Run Code Online (Sandbox Code Playgroud)

如果我们从“导入类型”语句中删除“类型”,则测试可以工作,但运行时错误会再次发生。

我已经搜索了很多(主要是尝试使用/重新配置 babel,因为我找到了这篇文章: https: //github.com/babel/babel/issues/10981),但现在我无法解决这个问题问题。

typescript jestjs angular type-only-import-export

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