sequelize调用save和update方法出错
更新:2017-10-24 08:43:45 发现自己下面的方法不能根治bug。但有人回复了我在github上提的issuev3不在支持,用v4吧重装最新版的sequelize,还需装mysql2模块。~世界从此清净了~
更新:2017-10-19 22:48:11 问题已解决。自己在下面自问自答。
从数据库中获取了一篇文章,要修改内容,但一直报错val.replace is not a function
补充:article的模型 后来改了映射 contents: content
var DB = require('../db.js');
var Sequelize = require('sequelize');
module.exports = DB.define('article',{
id: {
type: Sequelize.INTEGER,
field: 'id',
unique: true,
primaryKey: true,
allowNull: false,
autoIncrement: true
},
title: {
type: Sequelize.STRING(100),
field: 'title',
defaultValue: ''
},
cateid: {
type: Sequelize.INTEGER,
field: 'cateid',
allowNull: false
},
time: {
type: Sequelize.DATE,
field: 'time',
defaultValue: Sequelize.NOW
},
clicks: {
type: Sequelize.INTEGER(11),
field: 'click',
defaultValue: 0
},
contents: {
type: Sequelize.TEXT,
field: 'content',
defaultValue: ''
},
hide: {
type: Sequelize.BOOLEAN,
field: 'hide',
defaultValue: false
},
tags: {
type: Sequelize.TEXT,
field: 'tags',
defaultValue: ''
}
}, {
tableName: 'think_article',
timestamps: false, //是否自动添加时间戳
freezeTableName: true // Model 对应的表名将与model名相同
});
数据库设计
var Article = require('../../orm/models/article');
var ArticleBLL = require('../../orm/BLL/Article');
...
var p = await ArticleBLL.GetById(id);
try {
//方法一
//await p.update({ content: 'wori' });
//方法二
await Article.update({ content: htmlTree.Root.innerHTML }, { where: { id: p.id } });
//方法三
//p.content = htmlTree.Root.innerHTML;
//await p.save();
res.redirect('/article/detail/' + id);
} catch (e) {
//一直是这个:val.replace is not a function
console.log(e.message);
res.render('home/404');
}
补充:调试了一下,发现在sql-string.js文件中val由传入的'123'变成了一个函数~~
补充调试:
修改数据的语句
2017-9-2 23:24:08
发现是instance.js 846行 save方法里出错了
2017-9-2 23:29:17
发现是instance.js 573行 Promise.bind出错了
2017-9-2 23:37:38
promise.js 496行 receiver 内容没问题 难道是contents字段字太多?
promise.js 524行 回滚了 promise._resolveCallback
走错路了
2017-9-2 23:51:04
query-generator.js 474行 及开始调用escape了 断点要打在这里!
465行key是content?为什么 content = 'wori'??? 我曹数据库确实是
但还有一个type键 为什么?
找到了escape的位置 query-generator.js 946行 注释明明说 Escape a value (e.g. a string, number or date)
执行到 978行 调用了SqlString.escape 划重点!
最终跳到了 sql-string.js的 val.replace中 然后出错
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
今天(2017-09-21)发现,BLL文件中单独测试修改保存,竟然没问题。BLL文件引入到其他文件中就报错了。
2017-10-19 22:45:26 问题解决了。
修改源文件node_modules_sequelize@3.30.4@sequelizelibdialectsabstractquery-generator.js
第473行中的value可能是function 此时key是'type'。
在后面加一句if(typeof value == 'function') continue;
既然
val
变成了一个函数,那你要找到给val
赋值的地方来分析,是哪里把它变成了一个函数。