【问题标题】:Node js mosca broker error: Expected `schema` to be an object or boolean节点 js mosca 代理错误:预期的“模式”是一个对象或布尔值
【发布时间】:2020-10-03 21:11:43
【问题描述】:

我创建了一个简单的代理:

var mosca = require("mosca");
var settings = {
  port: 1883,
};

var server = new mosca.Server(settings);

server.on("ready", function () {
  console.log("ready");
});

运行文件时出现此错误:

/home//Documents/mqtt/node_modules/jsonschema/lib/validator.js:107
    throw new SchemaError('Expected `schema` to be an object or boolean');
    ^
SchemaError: Expected `schema` to be an object or boolean
    at Validator.validate (/home//Documents/mqtt/node_modules/jsonschema/lib/validator.js:107:11)
    at Object.validate (/home//Documents/mqtt/node_modules/mosca/lib/options.js:264:26)
    at new Server (/home//Documents/mqtt/node_modules/mosca/lib/server.js:104:34)
    at Object.<anonymous> (/home//Documents/mqtt/broker.js:16:14)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47 {
  schema: undefined
}

我正在跑步:

节点:v12.18.4

npm: 6.14.6

【问题讨论】:

标签: node.js mqtt mosca


【解决方案1】:

就像 JD Allen 说的,运行 aedes 比运行 mosca 好,它的依赖 jsonschema 更新到版本 1.2.8 后就坏了,你可以手动安装 jsonschema 1.2.6 来运行它而不会出错。在更新到 1.2.8 之前它还没有被破坏

【讨论】:

    【解决方案2】:

    validator.js (\node_modules\jsonschema\lib\validator.js:111) 中评论此行:

    if((typeof schema !== 'boolean' && typeof schema !== 'object') || schema === null){
         throw new SchemaError('Expected `schema` to be an object or boolean');
    }
    

    【讨论】:

      【解决方案3】:

      在运行时转到 \node_modules\jsonschema\lib\validator.js。将第 106 行的代码替换为

      if((typeof schema == 'boolean' &amp;&amp; typeof schema == 'object') || schema === null){

      【讨论】:

      • 一个变量可以同时是booleanobject吗?
      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      • 编辑依赖不是好办法,用aedes才是正确答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2016-09-07
      • 1970-01-01
      • 2021-09-11
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多