Reputation: 616
I am creating a SimpleSchema for my staff collection in Meteor and I am getting error "TypeError: SimpleSchema is not a constructor" in my server console. I've gone through the SimpleSchema documentation and this constructor is there, my code is same as their example. Not sure why this error is coming.
Server console Error
W20180516-23:44:46.314(2)? (STDERR) /Users/anarayan/.meteor/packages/meteor-tool/.1.6.1_1.1rttc72.ip8ui++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:280
W20180516-23:44:46.315(2)? (STDERR) throw(ex);
W20180516-23:44:46.315(2)? (STDERR) ^
W20180516-23:44:46.316(2)? (STDERR)
W20180516-23:44:46.316(2)? (STDERR) TypeError: SimpleSchema is not a constructor
W20180516-23:44:46.316(2)? (STDERR) at Staffs.js (imports/api/Staffs/Staffs.js:20:17)
W20180516-23:44:46.317(2)? (STDERR) at fileEvaluate (packages/modules-runtime.js:343:9)
W20180516-23:44:46.317(2)? (STDERR) at require (packages/modules-runtime.js:238:16)
W20180516-23:44:46.318(2)? (STDERR) at methods.js (imports/api/Staffs/methods.js:1:193)
W20180516-23:44:46.318(2)? (STDERR) at fileEvaluate (packages/modules-runtime.js:343:9)
W20180516-23:44:46.318(2)? (STDERR) at require (packages/modules-runtime.js:238:16)
W20180516-23:44:46.319(2)? (STDERR) at api.js (imports/startup/both/api.js:1:67)
W20180516-23:44:46.319(2)? (STDERR) at fileEvaluate (packages/modules-runtime.js:343:9)
W20180516-23:44:46.319(2)? (STDERR) at require (packages/modules-runtime.js:238:16)
W20180516-23:44:46.320(2)? (STDERR) at index.js (imports/startup/server/index.js:1:50)
W20180516-23:44:46.320(2)? (STDERR) at fileEvaluate (packages/modules-runtime.js:343:9)
W20180516-23:44:46.320(2)? (STDERR) at require (packages/modules-runtime.js:238:16)
W20180516-23:44:46.321(2)? (STDERR) at main.js (server/main.js:1:14)
W20180516-23:44:46.321(2)? (STDERR) at fileEvaluate (packages/modules-runtime.js:343:9)
W20180516-23:44:46.321(2)? (STDERR) at require (packages/modules-runtime.js:238:16)
W20180516-23:44:46.322(2)? (STDERR) at /Users/anarayan/project/BusApp/.meteor/local/build/programs/server/app/app.js:7391:1
W20180516-23:44:46.323(2)? (STDERR) at /Users/anarayan/project/BusApp/.meteor/local/build/programs/server/boot.js:411:36
W20180516-23:44:46.323(2)? (STDERR) at Array.forEach (<anonymous>)
W20180516-23:44:46.323(2)? (STDERR) at /Users/anarayan/project/BusApp/.meteor/local/build/programs/server/boot.js:220:19
W20180516-23:44:46.324(2)? (STDERR) at /Users/anarayan/project/BusApp/.meteor/local/build/programs/server/boot.js:471:5
W20180516-23:44:46.324(2)? (STDERR) at Function.run (/Users/anarayan/project/BusApp/.meteor/local/build/programs/server/profile.js:510:12)
W20180516-23:44:46.324(2)? (STDERR) at /Users/anarayan/project/BusApp/.meteor/local/build/programs/server/boot.js:470:11
and Here is the class
/* eslint-disable consistent-return */
import { Mongo } from 'meteor/mongo';
import { SimpleSchema } from 'simpl-schema';
const Staffs = new Mongo.Collection('staffs');
Staffs.allow({
insert: () => false,
update: () => false,
remove: () => false,
});
Staffs.deny({
insert: () => true,
update: () => true,
remove: () => true,
});
Staffs.schema = new SimpleSchema({
name: {
type: String,
label: 'Staff Name',
},
email: {
type: String,
label: 'Staff email id',
},
mobile: {
type: String,
label: 'Staff mobile number',
},
status: {
type: String,
label: 'Staff Status',
},
role: {
type: String,
label: 'Role name',
},
location: {
type: String,
label: 'Location from where staff belongs',
},
createdAt: {
type: String,
label: 'The date this document was created.',
autoValue() {
if (this.isInsert) return (new Date()).toISOString();
},
},
updatedAt: {
type: String,
label: 'The date this document was last updated.',
autoValue() {
if (this.isInsert || this.isUpdate) return (new Date()).toISOString();
},
},
});
Staffs.attachSchema(Staffs.schema);
export default Staffs;
Thanks for helping me out.
Upvotes: 3
Views: 1124
Reputation: 3335
Adding an answer for those coming here and already have un-curly-braced their import. It seems that if you already have data in your database this also occurs.
See https://stackoverflow.com/a/52579056/204658
Upvotes: 0
Reputation: 8423
You need to import the package without curly brackets because it is exported to the public as default export:
import SimpleSchema from 'simpl-schema';
Because of this you could even import it this way:
import MyRenamedSchema from 'simpl-schema';
Which could then be called by the other named constructor new MyRenamedSchema
Resources
Quick start of the documentation:
https://github.com/aldeed/simple-schema-js/blob/master/README.md#quick-start
Export types:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export
Upvotes: 5
Reputation: 56
You need to add below packages in your .meteor/packages to use the SimpleSchema constructor.
aldeed:collection2
aldeed:simple-schema
Hope it helps !
Upvotes: -1