sails.js - addToCollection() 不适用于我创建的模型,但适用于预构建的“用户”模型
问题描述
当我使用 OrganisationalUnit 模型await
OrganisationalUnit.addToCollection(id,'users',userIds); 我收到一个错误
TypeError: OrganisationalUnit.addToCollection is not a function
at Object.fn (/var/www/html/prime/api/controllers/organisational-units/add-users-to-unit.js:38:30)
但是,当我使用具有相同参数的用户模型时(仅用于测试)
await User.addToCollection(id,'units',userIds); //it saves perfectly!
然后我尝试打印模型本身并且有区别:
console.log(OrganisationalUnit) //prints
{ attributes:
{ name: { type: 'string', required: true, autoMigrations: [Object] },
location: { type: 'string', autoMigrations: [Object] },
parent: { model: 'OrganisationalUnit', autoMigrations: [Object] },
users:
{ collection: 'User',
via: 'units',
description: 'the units this user manages' } },
identity: 'organisationalunit',
globalId: 'OrganisationalUnit' }
和
console.log(User) //prints
newConstructor {
_adapter:
{ identity: 'sails-mongo',
adapterApiVersion: 1,
defaults: { schema: false },
datastores: { default: [Object] },
mongodb:
{ [Function]
MongoError: [Function: MongoError],
MongoNetworkError: [Function: MongoNetworkError],
MongoTimeoutError: [Function: MongoTimeoutError],
MongoServerSelectionError: [Function: MongoServerSelectionError],
MongoParseError: [Function: MongoParseError],
MongoWriteConcernError: [Function: MongoWriteConcernError],
MongoBulkWriteError: [Function: BulkWriteError],
BulkWriteError: [Function: BulkWriteError],
Admin: [Function: Admin],
MongoClient: [Function],
Db: [Function],
Collection: [Function: Collection],
Server: [Function: Server],
ReplSet: [Function: ReplSet],
Mongos: [Function: Mongos],
ReadPreference: [Function],
GridStore: [Function],
Chunk: [Function],
Logger: [Function],
AggregationCursor: [Function: AggregationCursor],
CommandCursor: [Function: CommandCursor],
Cursor: [Function: Cursor],
GridFSBucket: [Function],
CoreServer: [Function],
CoreConnection: [Function: Connection],
Binary: [Function],
Code: [Function],
Map: [Function],
DBRef: [Function],
Double: [Function],
Int32: [Function],
Long: [Function],
MinKey: [Function],
MaxKey: [Function],
ObjectID: [Function],
ObjectId: [Function],
Symbol: [Function],
Timestamp: [Function],
BSONRegExp: [Function],
Decimal128: [Function],
connect: [Circular],
instrument: [Function] },
registerDatastore: [Function: registerDatastore],
teardown: [Function: teardown],
createManager:
{ friendlyName: 'Create manager',
description:
'Build and initialize a connection manager instance (in Mongo, this is `db`).',
moreInfoUrl:
'https://github.com/node-machine/driver-interface/blob/master/machines/create-manager.js',
inputs: [Object],
exits: [Object],
fn: [Function: fn],
identity: 'create-manager',
implementationType: 'analog' },
destroyManager:
{ friendlyName: 'Destroy manager',
description:
'Destroy the specified connection manager and all of its active connections.',
extendedDescription:
'This may involve destroying a pool and its connections, destroying multiple pools and their connections, doing nothing at all (if this manager just does ad-hoc connections), or something even more exotic. The implementation is left up to the driver.',
sync: true,
inputs: [Object],
exits: [Object],
fn: [Function: fn],
identity: 'destroy-manager',
implementationType: 'analog' },
getConnection:
{ friendlyName: 'Get connection',
description:
'Get an active connection to the database (in Mongo, this is currently a no-op).',
moreInfoUrl:
'https://github.com/node-machine/driver-interface/blob/master/machines/get-connection.js',
sync: true,
inputs: [Object],
exits: [Object],
fn: [Function: fn],
identity: 'get-connection',
implementationType: 'analog' },
releaseConnection:
{ friendlyName: 'Release connection',
description: 'Release an active database connection.',
extendedDescription:
'Depending on the implementation of this driver, this might release the connection back into the pool or close it entirely. Regardless, if the provided connection has a transaction started, be sure to end the transaction by either committing it or rolling it back before releasing the connection.',
sync: true,
inputs: [Object],
exits: [Object],
fn: [Function: fn],
identity: 'release-connection',
implementationType: 'analog' },
verifyModelDef:
{ friendlyName: 'Verify model def',
description:
'Verify that the specified model definition is compatible with this adapter.',
extendedDescription:
'This assumes that the provided model def has already undergone adapter-agnostic normalization, and is considered generally valid.',
sideEffects: 'cacheable',
sync: true,
inputs: [Object],
exits: [Object],
fn: [Function: fn],
identity: 'verify-model-def',
implementationType: 'analog' },
create: [Function],
createEach: [Function],
update: [Function],
destroy: [Function],
find: [Function],
count: [Function],
sum: [Function],
avg: [Function],
define: [Function: define],
drop: [Function: drop],
definePhysicalModel:
{ friendlyName: 'Define (physical model)',
description:
'Define a physical model (i.e. Mongo collection) with the specified characteristics, creating indexes as needed.',
sideEffects: 'idempotent',
inputs: [Object],
exits: [Object],
fn: [Function: fn],
identity: 'define-physical-model',
implementationType: 'analog' },
dropPhysicalModel:
{ friendlyName: 'Drop (physical model)',
description:
'Completely drop & destroy any traces of a particular physical model (i.e. Mongo collection).',
sideEffects: 'idempotent',
inputs: [Object],
exits: [Object],
fn: [Function: fn],
identity: 'drop-physical-model',
implementationType: 'analog' },
setPhysicalSequence:
{ friendlyName: 'Set physical sequence',
description: 'Reset a auto-incrementing sequence to the specified value.',
sideEffects: 'idempotent',
inputs: [Object],
exits: [Object],
fn: [Function: fn],
identity: 'set-physical-sequence',
implementationType: 'analog' } },
_orm:
{ collections:
{ organisationalunit: [newConstructor],
user: [Circular],
archive: [newConstructor],
organisationalunit_users__user_units: [newConstructor] },
datastores: {} },
waterline:
{ collections:
{ organisationalunit: [newConstructor],
user: [Circular],
archive: [newConstructor],
organisationalunit_users__user_units: [newConstructor] },
datastores: {} },
_callbacks: {},
hasSchema: true,
_transformer:
{ _transformations:
{ createdAt: 'createdAt',
updatedAt: 'updatedAt',
id: '_id',
emailAddress: 'emailAddress',
emailStatus: 'emailStatus',
emailChangeCandidate: 'emailChangeCandidate',
password: 'password',
fullName: 'fullName',
isSuperAdmin: 'isSuperAdmin',
passwordResetToken: 'passwordResetToken',
passwordResetTokenExpiresAt: 'passwordResetTokenExpiresAt',
emailProofToken: 'emailProofToken',
emailProofTokenExpiresAt: 'emailProofTokenExpiresAt',
stripeCustomerId: 'stripeCustomerId',
hasBillingCard: 'hasBillingCard',
billingCardBrand: 'billingCardBrand',
billingCardLast4: 'billingCardLast4',
billingCardExpMonth: 'billingCardExpMonth',
billingCardExpYear: 'billingCardExpYear',
tosAcceptedByIp: 'tosAcceptedByIp',
lastSeenAt: 'lastSeenAt' } },
associations:
[ { alias: 'units',
type: 'collection',
collection: 'organisationalunit',
via: 'users' } ],
publish: [Function: wrapper],
subscribe: [Function: wrapper],
unsubscribe: [Function: wrapper],
getRoomName: [Function: getRoomName],
_publishRPS: [Function: _publishRPS],
_room: [Function: wrapper],
_classRoom: [Function: _classRoom],
_publishUpdate: [Function: wrapper],
_publishDestroy: [Function: wrapper],
_publishAdd: [Function: wrapper],
_publishRemove: [Function: wrapper],
_publishCreate: [Function: wrapper],
_publishCreateSingle: [Function: _publishCreateSingle],
_watch: [Function: wrapper],
_introduce: [Function: wrapper],
_retire: [Function: wrapper],
autosubscribe: true }
请帮助我是 SailsJs 的新手
解决方案
推荐阅读
- javascript - Javascript - 我可以让这个表格滚动到顶部吗?
- wordpress - How to add block content in the cutsom gutenberg block
- parameter-passing - Passing parameters between Verilog modules
- oracle - Oracle Reports (6i): Get difference of two items from two different queries (Multi Query Report)
- javascript - custom modal does not appear react.js
- c++ - How to automaticly deduce template parameter for a function parameter of type `basic_string_view` or the like?
- excel - Using offset formula with CountIf for column
- html - div 定位(y 轴)与之前的 div y 轴位置相同,不需要的行为
- sql - 比较表 column_name 与视图 column_names
- python - Python to slack text Integration