如何让 Sails.js 查询现有数据库?
How do I get Sails.js to query an existing database?
已经为另一个项目设置了开发数据库。我正在尝试创建一个 sails.js 服务器来连接到该数据库并充当 RESTful API。我还使用 SQL Workbench 和下面的配置文件来连接到数据库并验证我的查询语句。在该工具上,我能够发送 select top 10 * from advisor
之类的查询并获得我期望的响应数据。
我在 sails.js 中的连接配置似乎没问题,因为我能够启动服务器。我已经获得了简单的静态操作,例如 hi: function (req, res) { return res.send("Hi there!"); }
。但是,我无法弄清楚如何从 sails 提供的数据库中获得响应。我的目标(此时)是 http://localhost:1337/advisor
return JSON 获得 select top 10 * from advisor
.
的结果
我最初尝试使用 freshly-generated 模型。然后,我尝试向模型文件添加属性。然后,我尝试将自己的代码添加到控制器中。在每种情况下,浏览器都没有收到响应。最后,我测试了 /advisor/list
到 运行 我自己的代码,它看起来不像 query() 回调被执行过。如果这是第一个问题,我有 运行 npm install sails-sqlserver
并且 double-checked 我的主机、数据库、用户名和密码与 Workbench 中使用的相同.
connections.js
sqlserver: {
adapter: 'sails-sqlserver',
user: 'myusername',
password: 'mypassword',
host: 'mysubdomain.mydomain.net:1433',
database: 'frontofficedev'
}
models.js
module.exports.models = {
connection: 'sqlserver',
migrate: 'safe'
};
api\models\Advisor.js
module.exports = {
attributes: {
advcode: 'string',
advname: 'string',
'adv-default': 'boolean',
"user-id": 'string',
"pc-code": 'string',
"adv-tag": 'string',
"is-group": 'boolean',
"trade-grouping": 'string',
AdvisorId: 'int',
orgcode: 'string',
BranchId: 'int',
OrdPrnBranchId: 'int',
zdec1: 'float',
zdec2: 'float',
zchar1: 'string',
zchar2: 'string',
zchar3: 'string',
zchar4: 'string',
AdvStatus: 'string'
}
};
api\controllers
module.exports = {
hi: function (req, res) {
return res.send("Hi there!");
},
list: function (req, res) {
var myQuery = "select TOP 10 * from advisor";
sails.log.debug("Query :", myQuery);
console.log(Advisor);
Advisor.query(myQuery, function (err, advisors){
console.log(advisors);
console.log(err);
if(err || !advisors.rows.length){
return res.json({"status": 0, "error": err});
}
else{
return res.json(advisors);
}
});
}
};
对我做错了什么有什么想法吗? JDBC 是否导致问题?提前致谢。
我假设你已经 运行: npm install sails-sqlserver --save
您必须指定您的连接以及您将在模型中使用的 table,模型中的变量应与您的数据库变量匹配,如下所示:
api\models\Advisor.js
module.exports = {
schema: true,
connection: 'sqlserver',
tableName: 'yourTableName',
attributes: {
advcode:{
type: 'string',
primaryKey: true //if this is a primary key
},
advname:{
type: 'string'
},
'adv-default':{
type: 'boolean'
}
};
在您的控制器中,您可以像这样使用 Sails ORM 水线:
api\controllers
module.exports = {
list: function (req, res) {
Advisor.query('SELECT * FROM advisor', function(err, results) {
if (err) {
res.send(400);
} else {
res.send(results);
}
});
}
};
其中 Advisor 是模型。
有关模型和 ORM waterline 的更多具体信息,我建议您阅读 sails 文档:http://sailsjs.org/documentation/reference/waterline-orm/models
我的同事发现了这个问题。数据库所在的端口需要是 sails 的 connection.js 中的单独属性(而不是将其包含在主机字符串中)。不需要额外的库,比如 node-jdbc.
config/connections.js
sqlserver: {
adapter: 'sails-sqlserver',
user: 'myusername',
password: 'mypassword',
host: 'mysubdomain.mydomain.net',
port: 1433,
database: 'frontofficedev'
}
进行更改后,我能够从控制器中删除所有自定义代码,并从模型中删除几乎所有内容(我仍然需要指定一个主键,因为 sails 默认查找 id
并且数据库正在使用 AdvisorId
.
api/models/Advisor.js
module.exports = {
attributes: {
AdvisorId: {primaryKey: true}
}
};
已经为另一个项目设置了开发数据库。我正在尝试创建一个 sails.js 服务器来连接到该数据库并充当 RESTful API。我还使用 SQL Workbench 和下面的配置文件来连接到数据库并验证我的查询语句。在该工具上,我能够发送 select top 10 * from advisor
之类的查询并获得我期望的响应数据。
我在 sails.js 中的连接配置似乎没问题,因为我能够启动服务器。我已经获得了简单的静态操作,例如 hi: function (req, res) { return res.send("Hi there!"); }
。但是,我无法弄清楚如何从 sails 提供的数据库中获得响应。我的目标(此时)是 http://localhost:1337/advisor
return JSON 获得 select top 10 * from advisor
.
我最初尝试使用 freshly-generated 模型。然后,我尝试向模型文件添加属性。然后,我尝试将自己的代码添加到控制器中。在每种情况下,浏览器都没有收到响应。最后,我测试了 /advisor/list
到 运行 我自己的代码,它看起来不像 query() 回调被执行过。如果这是第一个问题,我有 运行 npm install sails-sqlserver
并且 double-checked 我的主机、数据库、用户名和密码与 Workbench 中使用的相同.
connections.js
sqlserver: {
adapter: 'sails-sqlserver',
user: 'myusername',
password: 'mypassword',
host: 'mysubdomain.mydomain.net:1433',
database: 'frontofficedev'
}
models.js
module.exports.models = {
connection: 'sqlserver',
migrate: 'safe'
};
api\models\Advisor.js
module.exports = {
attributes: {
advcode: 'string',
advname: 'string',
'adv-default': 'boolean',
"user-id": 'string',
"pc-code": 'string',
"adv-tag": 'string',
"is-group": 'boolean',
"trade-grouping": 'string',
AdvisorId: 'int',
orgcode: 'string',
BranchId: 'int',
OrdPrnBranchId: 'int',
zdec1: 'float',
zdec2: 'float',
zchar1: 'string',
zchar2: 'string',
zchar3: 'string',
zchar4: 'string',
AdvStatus: 'string'
}
};
api\controllers
module.exports = {
hi: function (req, res) {
return res.send("Hi there!");
},
list: function (req, res) {
var myQuery = "select TOP 10 * from advisor";
sails.log.debug("Query :", myQuery);
console.log(Advisor);
Advisor.query(myQuery, function (err, advisors){
console.log(advisors);
console.log(err);
if(err || !advisors.rows.length){
return res.json({"status": 0, "error": err});
}
else{
return res.json(advisors);
}
});
}
};
对我做错了什么有什么想法吗? JDBC 是否导致问题?提前致谢。
我假设你已经 运行: npm install sails-sqlserver --save
您必须指定您的连接以及您将在模型中使用的 table,模型中的变量应与您的数据库变量匹配,如下所示:
api\models\Advisor.js
module.exports = {
schema: true,
connection: 'sqlserver',
tableName: 'yourTableName',
attributes: {
advcode:{
type: 'string',
primaryKey: true //if this is a primary key
},
advname:{
type: 'string'
},
'adv-default':{
type: 'boolean'
}
};
在您的控制器中,您可以像这样使用 Sails ORM 水线:
api\controllers
module.exports = {
list: function (req, res) {
Advisor.query('SELECT * FROM advisor', function(err, results) {
if (err) {
res.send(400);
} else {
res.send(results);
}
});
}
};
其中 Advisor 是模型。
有关模型和 ORM waterline 的更多具体信息,我建议您阅读 sails 文档:http://sailsjs.org/documentation/reference/waterline-orm/models
我的同事发现了这个问题。数据库所在的端口需要是 sails 的 connection.js 中的单独属性(而不是将其包含在主机字符串中)。不需要额外的库,比如 node-jdbc.
config/connections.js
sqlserver: {
adapter: 'sails-sqlserver',
user: 'myusername',
password: 'mypassword',
host: 'mysubdomain.mydomain.net',
port: 1433,
database: 'frontofficedev'
}
进行更改后,我能够从控制器中删除所有自定义代码,并从模型中删除几乎所有内容(我仍然需要指定一个主键,因为 sails 默认查找 id
并且数据库正在使用 AdvisorId
.
api/models/Advisor.js
module.exports = {
attributes: {
AdvisorId: {primaryKey: true}
}
};