如果您想了解javascript–NodeJSSequelize–无法读取未定义的属性’_isSequelizeMethod’和无法读取未定义的属性get的知识,那么本篇文章将是您的不二之选。我们将深
如果您想了解javascript – NodeJS Sequelize – 无法读取未定义的属性’_isSequelizeMethod’和无法读取未定义的属性get的知识,那么本篇文章将是您的不二之选。我们将深入剖析javascript – NodeJS Sequelize – 无法读取未定义的属性’_isSequelizeMethod’的各个方面,并为您解答无法读取未定义的属性get的疑在这篇文章中,我们将为您介绍javascript – NodeJS Sequelize – 无法读取未定义的属性’_isSequelizeMethod’的相关知识,同时也会详细的解释无法读取未定义的属性get的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- javascript – NodeJS Sequelize – 无法读取未定义的属性’_isSequelizeMethod’(无法读取未定义的属性get)
- egg-sequelize --- nodejs
- javascript – Ext JS动态存储插入无法读取未定义的属性’isModel’
- javascript – Node.js / Sequelize.js / Express.js – 如何插入多对多关联? (同步/异步?)
- javascript – Sequelize classMethods vs instanceMethods
javascript – NodeJS Sequelize – 无法读取未定义的属性’_isSequelizeMethod’(无法读取未定义的属性get)
我有一个使用Express的NodeJS服务器.
对于我的数据库,我使用Sequelize,我在Sequelize文档中定义了我的模型:
车型/ index.js
"use strict";
var fs = require("fs");
var path = require("path");
var Sequelize = require("sequelize");
var sequelize = new Sequelize(''mydb'', ''root'', '''', {
host: ''localhost'',
dialect: ''MysqL'',
pool: {
max: 5,
min: 0,
idle: 10000
}
});
var db = {};
fs
.readdirsync(__dirname)
.filter(function(file) {
return (file.indexOf(".") !== 0) && (file !== "index.js");
})
.forEach(function(file) {
var model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
车型/ server.js
"use strict";
module.exports = function(sequelize, DataTypes) {
var Server = sequelize.define(''Server'', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
unique: true,
allowNull: false
},
reference: DataTypes.STRING,
name: DataTypes.STRING
},
{
timestamps: false,
paranoid: false,
underscored: true,
freezeTableName: true,
tableName: ''server''
});
return Server;
};
车型/ subscriber.js
"use strict";
module.exports = function(sequelize, DataTypes) {
var Subscriber = sequelize.define(''Subscriber'', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
unique: true,
allowNull: false
},
type: {
type: DataTypes.ENUM,
values: [''email'', ''phone'']
},
contact: DataTypes.STRING,
server_id: DataTypes.INTEGER,
notified: DataTypes.INTEGER,
last_notified: DataTypes.DATE
},
{
timestamps: false,
paranoid: false,
underscored: true,
freezeTableName: true,
tableName: ''subscriber'',
classMethods: {
associate: function(models) {
Subscriber.belongsTo(models.Server, { foreignKey: ''server_id'', targetKey: ''id'' });
}
}
});
return Subscriber;
};
在这里我的路线:
var models = require(''../models'');
app.get(''/subscribe/:type/:contact/:ref'', function(req, res) {
var type = req.params.type;
var contact = req.params.contact;
var ref = req.params.ref;
models.Subscriber.findAll().then(function(result) {
console.log(result);
});
res.render(''full/subscribed.twig'', {
type: type,
contact: contact,
server : server
});
});
当我访问我的路线时,我有以下错误消息:
Unhandled rejection TypeError: Cannot read property ''_isSequelizeMethod'' of undefined
at /Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1077:20
at Array.map (native)
at Object.QueryGenerator.selectQuery (/Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1067:55)
at QueryInterface.select (/Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/query-interface.js:669:25)
at null.<anonymous> (/Users/me/Projects/nodejs/myproject/node_modules/sequelize/lib/model.js:1398:32)
at tryCatcher (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/promise.js:510:31)
at Promise._settlePromise (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/promise.js:567:18)
at Promise._settlePromise0 (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/promise.js:612:10)
at Promise._settlePromises (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/promise.js:691:18)
at Async._drainQueue (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/async.js:133:16)
at Async._drainQueues (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/async.js:143:10)
at Immediate.Async.drainQueues [as _onImmediate] (/Users/me/Projects/nodejs/myproject/node_modules/bluebird/js/release/async.js:17:14)
at processImmediate [as _immediateCallback] (timers.js:383:17)
我尝试在一个独立的NodeJS文件上做一些经验,一切正常,我只是启动我的独立js文件,在数据库上有一些操作,一切正常.当我在Express路线上做同样的事情时,我有这个错误……
有人知道为什么?
提前致谢,
史蒂夫
解决方法:
我的上帝!我发现 !
这是因为我已经为Object原型添加了一些功能……
如果你的对象原型上有一些自定义函数,当sequelize获取模型的选项对象时,它会失败…
在node_modules / sequelize / lib / dialects / abstract / query-generator.js(第1067行)
mainAttributes = mainAttributes && mainAttributes.map(function(attr) {
mainAttributes包含我的自定义函数:
[ ''id'',
''reference'',
''name'',
[ undefined, ''join'' ],
[ undefined, ''getKeyByValue'' ] ]
我添加到Object的函数是join和getKeyByValue.
总而言之,当您使用Sequelize时,不要向Object.prototype添加自定义函数;)
希望它会帮助其他人.
史蒂夫
总结
以上是小编为你收集整理的javascript – NodeJS Sequelize – 无法读取未定义的属性’_isSequelizeMethod’全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
原文地址:https://codeday.me/bug/20190623/1266191.html
egg-sequelize --- nodejs
项目
egg + sequelize + mysql2
项目结构
配置
安装模块
npm install --save egg-sequelize
npm install --save egg-cors
npm install --save mysql2
config/pulgin.js
exports.sequelize = {
enable: true,
package: ''egg-sequelize'',
};
exports.cors = {
enable: true,
package: ''egg-cors'',
};
config/config.default.js
//mysql配置开始
config.sequelize = {
dialect: ''mysql'', // support: mysql, mariadb, postgres, mssql
dialectOptions: {
charset: ''utf8mb4'',
},
database: ''nodejs'',
host: ''localhost'',
port: ''3306'',
username: ''root'',
password: ''root'',
timezone: ''+08:00'',
};
//mysql配置结束
//cors配置开始
config.security = {
csrf: {
enable: false,
},
domainWhiteList: [ ''http://localhost:8080'' ],
};
config.cors = {
credentials: true,
};
//cors配置结束
数据建模
mysql 建表
CREATE TABLE `collect` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT ''收藏id'',
`author` varchar(255) DEFAULT NULL COMMENT ''作者'',
`date` varchar(255) DEFAULT NULL COMMENT ''日期'',
`link` varchar(255) DEFAULT NULL COMMENT ''链接'',
`title` varchar(255) DEFAULT NULL COMMENT ''标题'',
`created_at` datetime DEFAULT NULL COMMENT ''创建时间'',
`updated_at` datetime DEFAULT NULL COMMENT ''更改时间'',
PRIMARY KEY (`id`),
UNIQUE KEY `title` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=''收藏表'';
model/collect.js
''use strict'';
module.exports = app => {
const {
INTEGER,
STRING,
DATE
} = app.Sequelize;
const Collect = app.model.define(''collect'',{
id:{
type:INTEGER,
primaryKey:true,
autoIncrement:true
},
author:STRING,
date:STRING,
link:STRING,
title:STRING,
created_at:DATE,
updated_at:DATE
},{
freezeTableName: true, //使用默认表名,不会变以collects
})
return Collect;
}
(选配)启动时创建数据库表
// {work_dir}/app.js
module.exports = app => {
app.beforeStart(async function () {
await app.model.sync({ force: true });
});
};
service
service/collect.js
''use strict'';
const Service = require(''egg'').Service;
class CollectService extends Service {
// 查询所有数据
async findAll() {
let ret = await this.ctx.model.Collect.findAll()
console.log(ret)
return ret
}
// 增加数据
async create(data) {
await this.ctx.model.Collect.create(data)
.then(res => {
console.log(''res: ''+ JSON.stringify(res))
}).catch(err => {
console.log(''err: ''+ JSON.stringify(err))
})
// try{
// let a= await this.ctx.model.Collect.create(data)
// console.log(a)
// }catch(err){
// console.log(err)
// }
}
// 修改数据
async update() {
const ret = await this.ctx.model.Collect.update({
author: ''新作者''
}, {
where: {
id: 2
}
}).then(ok => {
console.log(''ok'')
console.log(ok)
}).catch(e => {
console.log(''message:'' + e)
})
}
// 删除数据
async delete(callback){
await this.ctx.model.Collect.destroy({
where: {
id: 20
}
}).then(res => {
console.log(''res:'' + JSON.stringify(res))
return callback(JSON.stringify(res))
})
}
// 自定义查询
async query(callback){
let sql = ''SELECT COUNT(1) FROM collect''
let ret = await this.ctx.model.query(sql, {type: ''SELECT''})
return ret
}
}
module.exports = CollectService;
controller
controller/collect.js
''use strict'';
const Controller = require(''egg'').Controller;
class CollectController extends Controller {
async findAll(){
const {ctx} = this;
ctx.body = await ctx.service.collect.findAll()
}
async create(){
const ctx = this.ctx
const body = ctx.request.body
const ret = await ctx.service.collect.create(body)
ctx.body = ''<h1>添加数据</h1>''
}
async update() {
await this.ctx.service.collect.update()
this.ctx.body = ''<h1>修改数据</h1>''
}
async delete() {
await this.ctx.service.collect.delete(function(res, err) {
console.log(''ret: '' + res)
})
console.log(''哈哈哈哈'')
this.ctx.body = ''<h1>删除数据</h1>''
}
}
module.exports = CollectController;
router.js
router.get(''/collect'',controller.collect.findAll)
router.post(''/create'', controller.collect.create)
router.get(''/update'', controller.collect.update)
router.get(''/delete'', controller.collect.delete)
接下来,用postman 或者 其他测试软件自己跑一下...
javascript – Ext JS动态存储插入无法读取未定义的属性’isModel’
var map = record.getCommunity().mappings(); map.load({ url: '/myUrl/mappings',scope: this,callback: function(records,operation,success) { map.group('type'); //ExtJS bug https://www.sencha.com/forum/showthread.PHP?265674 me.getoutgoingGrid().destroy(); childGrid = Ext.create('hds.view.outgoingGrid',{ store: map }); me.getGridHolder().add(childGrid); me.getoutgoingGrid().getSelectionModel().select(0,false) ; } });
当我想创建一个新的模型实例并将其插入此动态存储时,我收到以下错误:
Cannot read property 'isModel' of undefined
以下是触发错误的代码:
var newMap = Ext.create('hds.model.MappingModel',{ indetifier : "something",}); me.getoutgoingGrid().store.insert(0,newMap);
我找不到这个问题的原因….任何想法?
解决方法
1 – 您需要在类原型中定义模型标识符,而不是在实例中.
2 – 你拼写错误的标识符
所以你的模型应该是这样的:
Ext.define('hds.model.MappingModel',{ identifier : "something",}); var newMap = new hds.model.MappingModel({ //...your config here });
您看到的错误当存储尝试检查model是否是Ext.data.Model的实例但未传递的模型未定义时,将抛出无法读取属性’isModel’的undefined.
这可能由于多种原因而发生,但通常是因为您在定义原型之前尝试创建模型,或者因为代码中存在拼写错误.
请尝试创建一个小提琴(https://fiddle.sencha.com)重现此错误,否则将很难帮助您.
问候,
javascript – Node.js / Sequelize.js / Express.js – 如何插入多对多关联? (同步/异步?)
Sequelize文档说如果模型是User和Project,“这将把方法getUsers,setUsers,addUsers添加到Project,getProjects,setProjects和addProject添加到User.”
这让我相信(看看承诺)我可能误解了如何使用Node的异步功能.我已经尝试了同步和异步版本的插入,两者都返回上面相同的消息.
Sequelize文档:http://docs.sequelizejs.com/en/latest/docs/associations/
码:
路线/ index.js
var express = require('express'); var router = express.Router(); var models = require('../models'); /* GET home page. */ router.get('/',function(req,res,next) { 'use strict'; var tIndividual,tEmail; tIndividual = models.Individual.create({ name: "Test" }); tEmail = models.Email.create({ address: "test@gmail.com" }); console.log(tEmail); res.render('index',{ title: 'Express' }); }); module.exports = router;
要么
/* GET home page. */ router.get('/',tEmail; tIndividual = models.Individual.create({ name: "Test" }).then(function(){ tEmail = models.Email.create({ address: "test@gmail.com" }).then(function(){ tIndividual.addEmail(tEmail).then(function(){ console.log("Success"); }); }) }); res.render('index',{ title: 'Express' }); }); module.exports = router;
车型/ index.js
db.Individual.hasMany(db.Email,{ as: 'Email',through: 'Individual_Email' }); db.Email.hasMany(db.Individual,{ as: 'Individual',through: 'Individual_Email' });
如何以最佳方式添加到表’Individual_Email’?我假设我需要同步地等待更新,但我愿意接受任何建议.谢谢!
解决方法
所以你的第一次尝试可以改写为:
models.Individual.create({ name: "Test" }).then(function(createdindividual) { // note the argument models.Email.create({ address: "test@gmail.com" }).then(function(createdEmail) { // note the argument createdindividual.addEmail(createdEmail) .then(function(addedEmail) { // note th-- well you get the idea :) console.log("Success"); }); }) });
上面的代码缺少一些重要的东西,比如返回promises以获得更好的链接和错误处理,但这是一个开始.我建议Bluebird’s documentation(这是Sequelize使用的Promise库,但还有其他几个)
javascript – Sequelize classMethods vs instanceMethods
'use strict'; var crypto = require('crypto'); module.exports = function(sequelize,DataTypes) { var User = sequelize.define('User',{ username: DataTypes.STRING,first_name: DataTypes.STRING,last_name: DataTypes.STRING,salt: DataTypes.STRING,hashed_pwd: DataTypes.STRING },{ classMethods: { },instanceMethods: { createSalt: function() { return crypto.randomBytes(128).toString('base64'); },hashPassword: function(salt,pwd) { var hmac = crypto.createHmac('sha1',salt); return hmac.update(pwd).digest('hex'); },authenticate: function(passwordToMatch) { return this.hashPassword(this.salt,passwordToMatch) === this.hashed_pwd; } } }); return User; };
我在使用classMethods vs instanceMethods时感到困惑.对我来说,当我想到createSalt()和hashPassword()应该是类的方法.他们是一般的,在很大程度上与他们一般使用的具体实例没有任何关系.但是当我在classMethods中有createSalt()和hashPassword()时,我无法从instanceMethods调用它们.
我已经尝试过以下变体:
this.createSalt(); this.classMethods.createSalt(); createSalt();
像下面的东西不会工作,我可能只是不了解一些简单的东西.
authenticate: function(passwordToMatch) { console.log(this.createSalt()); return this.hashPassword(this.salt,passwordToMatch) === this.hashed_pwd; }
任何提示/提示/方向将非常感谢!
解决方法
例如:
//should be a classMethods function getMyFriends() { return this.find({where{...}}) } //should be a instanceMethods function checkMyName() { return this.name === "george"; }
关于javascript – NodeJS Sequelize – 无法读取未定义的属性’_isSequelizeMethod’和无法读取未定义的属性get的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于egg-sequelize --- nodejs、javascript – Ext JS动态存储插入无法读取未定义的属性’isModel’、javascript – Node.js / Sequelize.js / Express.js – 如何插入多对多关联? (同步/异步?)、javascript – Sequelize classMethods vs instanceMethods等相关内容,可以在本站寻找。
本文标签: