Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Node js mosca broker error: Expected `schema` to be an object or boolean

I have created a simple broker:

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

var server = new mosca.Server(settings);

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

I get this error when i run i run the file:

/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
}

I am running:

node: v12.18.4

npm: 6.14.6

like image 557
James Davies Avatar asked Oct 03 '20 21:10

James Davies


Video Answer


3 Answers

Like JD Allen said, better to run aedes than mosca, it's broken after it's dependency jsonschema updated to version 1.2.8, you can manually install jsonschema 1.2.6 to run it without error. it's not yet broken before updated to 1.2.8

like image 73
Albert Suteja Avatar answered Nov 14 '22 23:11

Albert Suteja


comment this line in 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');
}
like image 23
Michael Atehortua Henao Avatar answered Nov 15 '22 01:11

Michael Atehortua Henao


In the runtime go to \node_modules\jsonschema\lib\validator.js. Replace the code on line 106 with

if((typeof schema == 'boolean' && typeof schema == 'object') || schema === null){
like image 31
Tarık Aykan Avatar answered Nov 14 '22 23:11

Tarık Aykan