jetlinks 规则编排中的函数节点使用 js 脚本格式化输出当前系统时间的坑

网上搜到的都是类似如下这种:

// 获取当前时间
var date= new Date();

// 格式化输出当前时间
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();

var formattedDate = year + "-" + 
                    ( month  + 1 ) + "-" + 
                    day + " " + 
                    hour + ":" + 
                    minute  + ":" + 
                    second ;

console.log(formattedDate); // 输出:yyyy-MM-dd HH:mm:ss

将其写入到 jetlinks 规则编排函数节点中:

var ctx = context;


handler.onMessage(function(ruleData){
    var reportTime = getReportTime();

    ctx.getLogger().warn("当前系统时间:");
    ctx.getLogger().warn(reportTime );

    return ruleData.data
})

function getReportTime(){
    // 获取当前时间
    var date = new Date();

    // 格式化输出当前时间
    var year = date.getFullYear();
    var month = date.getMonth();
    var day = date.getDate();
    var hour = date.getHours();
    var minute = date.getMinutes();
    var second = date.getSeconds();

    var reportTime = year + "-" + 
                        ( month  + 1 ) + "-" + 
                        day + " " + 
                        hour + ":" + 
                        minute  + ":" + 
                        second ;

    return reportTime;

}

运行报错:

java.lang.UnsupportedOperationException: can not cast to number:-
	at org.jetlinks.reactor.ql.utils.CastUtils.castNumber(CastUtils.java:160)
	Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: 
Assembly trace from producer [reactor.core.publisher.FluxDefer] :
	reactor.core.publisher.Flux.defer
	org.jetlinks.pro.rule.engine.executor.ScriptTaskExecutorProvider.lambda$createExecutor$8(ScriptTaskExecutorProvider.java:77)
Error has been observed at the following site(s):
	*_______Flux.defer ⇢ at org.jetlinks.pro.rule.engine.executor.ScriptTaskExecutorProvider.lambda$createExecutor$8(ScriptTaskExecutorProvider.java:77)
	|_ Flux.mapNotNull ⇢ at org.jetlinks.pro.rule.engine.executor.ScriptTaskExecutorProvider.lambda$createExecutor$8(ScriptTaskExecutorProvider.java:95)...

输出如下几个变量的类型:

var ctx = context;


handler.onMessage(function(ruleData){
    var reportTime = getReportTime();

    ctx.getLogger().warn("当前系统时间:");
    ctx.getLogger().warn(reportTime );

    return ruleData.data
})

function getReportTime(){
    // 获取当前时间
    var date = new Date();

    // 格式化输出当前时间
    var year = date.getFullYear();
    var month = date.getMonth();
    var day = date.getDate();
    var hour = date.getHours();
    var minute = date.getMinutes();
    var second = date.getSeconds();

    ctx.getLogger().warn( typeof year );
    ctx.getLogger().warn( typeof month );
    ctx.getLogger().warn( typeof day );
    ctx.getLogger().warn( typeof hour );
    ctx.getLogger().warn( typeof minute );
    ctx.getLogger().warn( typeof second );

    var reportTime = year + "-" + 
                        ( month  + 1 ) + "-" + 
                        day + " " + 
                        hour + ":" + 
                        minute  + ":" + 
                        second;

    return reportTime;

}

发现都是 number 类型:

怀疑是这里的语法要比 浏览器中的 javascript 语法要严格一些,数字类型不能和字符串类型直接相加,需要先转成字符串,修改后的脚本如下:

var ctx = context;


handler.onMessage(function(ruleData){
    var reportTime = getReportTime();

    ctx.getLogger().warn("当前系统时间:");
    ctx.getLogger().warn(reportTime );

    return ruleData.data
})

function getReportTime(){
    var date = new Date();
    var year = date.getFullYear().toString();
    var month = date.getMonth() + 1;
    if (month < 10) {
        month = '0' + month.toString();
    } else {
        month = month.toString();
    }

    var day = date.getDate();
    if (day < 10) {
        day = '0' + day.toString();
    } else {
        day = day.toString();
    }

    var hours = date.getHours();
    if (hours < 10) {
        hours = '0' + hours.toString();
    } else {
        hours = hours.toString();
    }

    var minutes = date.getMinutes();
    if (minutes < 10) {
        minutes = '0' + minutes.toString();
    } else {
        minutes = minutes.toString();
    }

    var seconds = date.getSeconds();
    if (seconds < 10) {
        seconds = '0' + seconds.toString();
    } else {
        seconds = seconds.toString();
    }

    var reportTime = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':00';
    return reportTime;

}

运行发现果然成功了^_^。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/323027.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

定制聚四氟乙烯反应容器可配套温度计套管和冷凝管

是谁遇到氟化氢就头疼&#xff0c;是谁看着玻璃装置被强碱性试剂折腾的惨不忍睹。 特氟龙塑料材质可以帮您解决问题&#xff0c;聚四氟乙烯材质是其中的一种材质&#xff0c;耐温250℃&#xff0c;耐受强酸强碱和各种有机溶剂&#xff0c;加工灵活&#xff0c;来样或者图纸或者…

线性代数基础【4】线性方程组

第四章 线性方程组 一、线性方程组的基本概念与表达形式 二、线性方程组解的基本定理 定理1 设A为mXn矩阵,则 (1)齐次线性方程组AX0 只有零解的充分必要条件是r(A)n; (2)齐次线性方程组AX0 有非零解(或有无数个解)的充分必要条件是r(A)&#xff1c;n 推论1 设A为n阶矩阵,则…

Matlab论文插图绘制模板第135期—隐函数曲面图(fimplicit3)

在之前的文章中&#xff0c;分享了Matlab隐函数折线图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下隐函数曲面图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的朋友可以关…

html5+css3+bootstrap+js 新闻网页

新闻网页练习打卡&#xff01; 一、首页 二、社会 三、财经 四、视频展示 简易新闻网站&#xff08;期末作业&#xff09;

使用WAF防御网络上的隐蔽威胁之SSRF攻击

服务器端请求伪造&#xff08;SSRF&#xff09;攻击是一种常见的网络安全威胁&#xff0c;它允许攻击者诱使服务器执行恶意请求。与跨站请求伪造&#xff08;CSRF&#xff09;相比&#xff0c;SSRF攻击针对的是服务器而不是用户。了解SSRF攻击的工作原理、如何防御它&#xff0…

在众多的材质中选择灰口铸铁铸造划线平台、铸铁平台等的原因——河北北重

使用灰口铸铁制作铸铁平台和划线平台的主要原因有以下几点&#xff1a; 强度高&#xff1a;灰口铸铁具有较高的强度和硬度&#xff0c;能够承受较大的载荷和冲击力。这使得灰口铸铁非常适合制作需要承受重压和磨损的平台和设备。 耐磨性好&#xff1a;灰口铸铁具有较高的耐磨性…

C++结合OpenCV:图像的加法运算

一、图像运算 针对图像的加法运算、位运算都是比较基础的运算。但是&#xff0c;很多复杂的图像处理功能正是借助这些基础的运算来完成的。所以&#xff0c;牢固掌握基础操作&#xff0c;对于更好地实现图像处理是非常有帮助的。本章简单介绍了加法运算、位运算&#xff0c;并…

【java八股文】之Redis基础篇

【java八股文】之JVM基础篇-CSDN博客 【java八股文】之MYSQL基础篇-CSDN博客 【java八股文】之Redis基础篇-CSDN博客 【java八股文】之Spring系列篇-CSDN博客 【java八股文】之分布式系列篇-CSDN博客 【java八股文】之多线程篇-CSDN博客 【java八股文】之JVM基础篇-CSDN博…

OpenHarmony—Docker编译环境

Docker环境介绍 OpenHarmony为开发者提供了两种Docker环境&#xff0c;以帮助开发者快速完成复杂的开发环境准备工作。两种Docker环境及适用场景如下&#xff1a; 独立Docker环境&#xff1a;适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。基于HPM的Docker环…

视频和音频怎么合并在一起?分享3个轻松合并的实用技巧

视频和音频怎么合并在一起&#xff1f;在数字媒体时代&#xff0c;视频和音频是制作多媒体内容不可或缺的元素。有时我们需要将视频和音频合并在一起&#xff0c;以创建更丰富、更有趣的多媒体内容。那么&#xff0c;如何将视频和音频合并在一起呢&#xff1f;下面将介绍一些实…

【C++】__declspec含义

目录 一、__declspec(dllexport)如果这篇文章对你有所帮助&#xff0c;渴望获得你的一个点赞&#xff01; 一、__declspec(dllexport) __declspec(dllexport) 是 Microsoft Visual C 编译器提供的一个扩展&#xff0c;用于指示一个函数或变量在 DLL&#xff08;动态链接库&…

scrapy爬虫实战

scrapy爬虫实战 Scrapy 简介主要特性示例代码 安装scrapy&#xff0c;并创建项目运行单个脚本代码示例配置itemsetting 爬虫脚本 代码解析xpath基本语法&#xff1a;路径表达式示例&#xff1a;通配符和多路径&#xff1a;函数&#xff1a;示例&#xff1a; 批量运行附录1&…

自动化测试 - Web自动化测试原理

目前市面上有很多Web UI自动化测试框架&#xff0c;比如WatiN, Selinimu,WebDriver&#xff0c;还有VS2010中的Coded UI等等. 这些框架都可以操作Web中的控件&#xff0c;模拟用户输入&#xff0c;点击等操作&#xff0c;实现Web自动化测试。其实这些工具的原理都一样&#xff…

谷达冠楠:抖店新手小白适合卖什么

随着抖音平台的不断发展&#xff0c;越来越多的人开始尝试在抖音上开设自己的店铺&#xff0c;希望通过这个平台实现创业梦想。然而&#xff0c;对于新手小白来说&#xff0c;如何选择合适的商品进行销售是一个非常重要的问题。本文将为您介绍一些适合抖店新手小白销售的商品类…

若依框架实现排序【升序或降序】很简单

前端实现 1. 在表格上加监听函数sort-change。如下红框所示&#xff1a; 2. 在表行上加排序字:sort-orders&#xff0c;可排序字sortable。如下红框所示&#xff1a; 3. 添加监听函数实现。代码如下&#xff1a; handleSortChange(column) {this.queryParams.orderByColumn …

什么是云服务器ECS - 云服务器 ECS - 阿里云

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云百科aliyunbai…

云渲染农场渲染和自己搭建农场渲染怎么选?哪个更划算?

&#xfeff;当我们面临繁重或紧急的渲染任务时&#xff0c;通常会选择云渲染的解决方案。可能很多人会问&#xff0c;我们是否能够自行建立一个小型的个人农场进行渲染呢&#xff1f;与云渲染农场相比&#xff0c;哪个更划算&#xff1f;更方便&#xff1f;接下来就带大家看看…

Yii实现邮件发送

一&#xff1a;yiisoft/yii2-swiftmailer拓展安装 composer require yiisoft/yii2-swiftmailer github地址&#xff1a;https://github.com/yiisoft/yii2-swiftmailer 文档地址&#xff1a;https://www.yiichina.com/doc/guide/2.0/tutorial-mailing 二&#xff1a;开启邮箱…

一刀切转为精细化,门店如何进行「体检式」巡查(一)

在品牌经营过程中&#xff0c;无论是直营店还是加盟商&#xff0c;都需要做好统一的品牌门店管理。比如总部对门店环境卫生、员工服务质量、货品质量等进行定期或不定期的巡检抽查&#xff0c;以确保各门店保持统一标准。 以往&#xff0c;传统巡店只能通过有纸质表格或微信汇报…

线程之间如何传递上下文信息

文章目录 源码解读1. 扩展ThreadPoolExecutor2. 扩展Runnable3. 整体流程 源于工作中一个业务场景的需求。 源码 话不多说&#xff0c;先贴完整的源码&#xff1a; public class ContextPassingBetweenThread {private static ThreadLocal<String> CONTEXT new Thread…