为Node.js添加后缀:ER_NO_SUCH_TABLE

我是新来的sequelize和Node.js。
我编码testingsequelize,但错误发生“ER_NO_SUCH_TABLE:表'db.node_tests'不存在”
错误非常简单。
但是,我想从“ node_test ”表中获取数据。
我认为续集是附加“性”的。

有我的源代码。

var Sequelize = require('sequelize'); var sequelize = new Sequelize('db', 'user', 'pass'); var nodeTest = sequelize.define('node_test', { uid: Sequelize.INTEGER , val: Sequelize.STRING} ); nodeTest.find({where:{uid:'1'}}) .success(function(tbl){ console.log(tbl); }); 

我已经创build了表“node_test”,并使用mysql客户端插入数据。

我误解了用法吗?

我find了答案我自己的问题。

我追加了Sequelize方法选项。 {define:{freezeTableName:true}}

然后在表名后面加上“s”字符。

Sequelize默认使用传入的模型名称的复数forms。 所以它会查找表“node_tests”或“NodeTests”。 也可以为你创build表格,如果你想要的话。

 nodeTest.sync().success(function() { // here comes your find command. }) 

同步将尝试创build表,如果它不存在。 您也可以使用sync({ force: true })删除现有表并从头创build一个新表。 检查命令行上的SQL命令以获取有关正在进行的操作的更多详细信息。

虽然答案很好,但我现在推荐在声明模型时使用tableName选项:

 sequelize.define('node_test', { uid: Sequelize.INTEGER, val: Sequelize.STRING }, { tableName: 'node_test' }); 

http://sequelizejs.com/documentation#models-configuration

当您将模型定义到现有表格时,您需要设置两个选项来进行后续处理:

  1. 按原样查找您的表名
  2. 不要担心它所期望的updatedAt和createdAtquize的默认列。

简单地添加这样的选项:

 var nodeTest = sequelize.define('node_test', { uid: Sequelize.INTEGER , val: Sequelize.STRING}, { freezeTableName: true , timestamps: false} //add both options here ); 

请注意选项参数:

  sequelize.define('name_of_your_table', {attributes_of_your_table_columns}, {options} ); 

当使用诸如nodeTest之类的sequelize方法时,缺less任一选项都会触发相应的错误。 findAll()

 > ER_NO_SUCH_TABLE //freezeTableName > ER_BAD_FIELD_ERROR //timestamps 

或者,您可以:

  1. 通过续集创build一个新表。 它会将“s”附加到表名中,并创build两个时间戳列作为默认值或
  2. 使用sequelize-auto ,一个很棒的npm包以编程方式从现有的数据库生成序列化模型。

以下是选项configuration的续集文档 。