首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Edge.js对象到字符串的转换

从Edge.js对象到字符串的转换
EN

Stack Overflow用户
提问于 2016-12-13 18:33:19
回答 1查看 504关注 0票数 0

我试图使用Tomasz的可怕的edgejs库从第三方dll中调用一个函数。根据我得到的错误消息,代码可能返回信息,也可能不返回信息。我收到的错误消息(见下面)说,代码需要一个字符串,但是正在返回一个ExpandoObject。我根据edgejs页面上的示例尝试了几种不同版本的代码,但它们都返回相同的错误。这个错误可能意味着它只是将扩展对象转换成字符串的问题,但是到目前为止我还没有成功。如果能在这个问题上提供任何帮助,我们将不胜感激。我一直在努力让这件事起作用的时间比我愿意承认的时间还要长。

基于 110 示例的edgejs github:代码

代码语言:javascript
复制
var edge = require('edge');

var createSerial = edge.func({
    source: {/*
    using System;
    using System.Threading.Tasks;

    public class Startup
    {
        public async Task<object> Invoke(string location)
        {
            var serial = new Serial(location);
            return new {
                validateLocation = (Func<object,Task<object>>)(
                    async (location) =>
                    { 
                        serial.ValidateLocation((string)location);
                        return serial.IsValid;
                    }
                )
            };
        }
    }

    public class Serial
    {
        public static Connection conn = new Connection("https://companyname.moraware.net/companyname/api.aspx", "username", "password");
        public bool IsValid { get; private set; }

        public Serial(bool isValid)
        {
            this.IsValid = isValid;
        }

        public void ValidateLocation(string location)
        {
         conn.AutoRefreshOnTimeout = true;
         if (!conn.Connected) { conn.Connect(); }
            this.IsValid = conn.GetInventoryLocations().Any(x => x.InventoryLocationName == location);
         if (conn.Connected) { conn.Disconnect(); }
        }
    }    */},
    references: ['JobTrackerAPI4.dll','Newtonsoft.Json.dll']

    });

var serial = createSerial("A01-01", true);
console.log(serial.validateLocation(null, true));

控制台错误输出:

代码语言:javascript
复制
C:\Users\csnow\NodeApps\MarshallDataEdge\node_modules\edge\lib\edge.js:161
return edge.initializeClrFunc(options);
            ^
Error: Unable to cast object of type 'System.Dynamic.ExpandoObject' to type 'System.String'.
    at Error (native)
    at Object.exports.func (C:\Users\csnow\NodeApps\MarshallDataEdge\node_modules\edge\lib\edge.js:161:17)
    at Object.<anonymous> (C:\Users\csnow\NodeApps\MarshallDataEdge\Evolveware_clr_instance.js:5:25)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:146:18)
    at node.js:404:3

Process finished with exit code 1

但随后我使用webstorm完成了代码,并从edge.js中发现了这个错误。ReferenceError: options is not defined

错误

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-13 23:56:53

将C#文本传递给edge.func的方式缺少了function () {...}包装器。它应该是:

代码语言:javascript
复制
edge.func({
  source: function () {/*
    // C# code goes here
  */},
  ...
});

而不是

代码语言:javascript
复制
edge.func({
  source: {/*
    // C# code goes here
  */},
  ...
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41128170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档