【问题标题】:Why can't I name my SailsJS models the same as my MySQL tables?为什么我不能将我的 SailsJS 模型命名为与我的 MySQL 表相同的名称?
【发布时间】:2015-03-15 23:41:01
【问题描述】:
我刚刚开始使用 Sails JS,对 RESTful API 缺乏经验。为了让事情开始,我按照指南的建议生成了一个User 模型。我认为这将与我的 users 表匹配。我根据我的表格列向我的模型添加了属性。当我提升我的服务器并向我的用户发出 GET 请求时,它返回了我的所有用户!我认为此时我可以生成其余的模型,所以我又创建了几个。那是我遇到问题的时候。我开始收到此错误:ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELEC FROM 'timeline' AS "timeline"' at line 1。这让我失望了。基于语法错误,我想也许这是我可以做的事情,尽管我没有在任何地方写任何查询。然后我注意到,当我将模型名称从“时间轴”更改为“时间轴”时,我没有遇到任何问题。
在我看来,Sails 对我将模型命名为与表格相同的名称存在问题。为什么是这样?这样做不是更合乎逻辑吗?此外,Sails 是否会尝试自动将我的模型与我的表格匹配?
【问题讨论】:
标签:
javascript
mysql
model-view-controller
express
sails.js
【解决方案1】:
在 'connection' 位置提供表名作为 tableName: 'My_Table_Name' 并在 config/connections.js 文件中提供连接为
sql服务器:{
适配器:'sails-sqlserver',
用户:'用户名',
密码:'你的密码',
数据库:'数据库名称'
},
并将此连接与 config/models.js 作为
连接:'sqlServer'
【解决方案2】:
是的,您可以使用 ORM 将模型名称与表名称相同,但在此您不需要在模型中定义 tableName。在 ORM 中会自动匹配模型名和表名。
【解决方案3】:
没有。 Sails.js 将表命名为模型(首字母小写)。您可能在其他地方出现错误,或者您的应用程序在sails 引擎重新生成数据库表之前崩溃。
要检查这个安装干净的风帆实例,在您的配置中保存等于alter 的models.migrate,并使用sails generate api apiName 生成您想要的任何API。扬帆起航,您会看到 apiName 表存在于您的数据库和 ApiName.js 模型中。
在使用旧的旧数据库或模型名称不代表它将存储的数据时,此行为可能会产生问题。在这种情况下,您可以将模型中的 tableName 属性设置为与表的名称相同 (documentation)。
【解决方案4】:
我遇到了同样的问题,我通过像这样连接我的 SQL 表并简单地给我的 rows columnName 属性来解决它
api/models/User.js
module.exports = {
connection: 'shinyNewMySQLDatabase',
attributes: {
name: {
type: 'string',
columnName: 'MY_SQL_COLUMN_NAME'
},
password: {
type: 'string',
columnName: 'MY_SQL_COLUMN_PASSWORD'
},
email: {
type: 'email',
unique: true,
columnName: 'MY_SQL_COLUMN_EMAIL'
}
}
};
查看以下文档
http://sailsjs.org/documentation/concepts/models-and-orm/attributes
如果有帮助,请告诉我