Sails.js 控制器未插入 Mongo 数据库
Sails.js controller not inserting into Mongo database
我一直在 SO 和 Sailsjs.org 试图找出问题所在,但无济于事。只是想学习 SailsJS 的基础知识。我有一个 UserController,当 POST
请求发送到 /user
时,会调用其 create()
方法。
create: function (req, res) {
var params = req.params.all();
User.create({
name: params.FirstName + ' ' + params.LastName,
email: params.Email,
password: params.Password,
jobTitle: params.JobTitle
}).exec(function createCB(err,created)
{
created.save(function(err)
{
// No error . . . still nothing in db
});
return res.json({name: created.name, jobTitle: created.jobTitle, email: created.email, password: created.password});
});
}
这里没有错误。所有请求参数都正常,并且可以毫无问题地返回给客户端。但实际上没有任何内容写入数据库。
在development.js中:
connections: {
mongo: {
adapter: 'sails-mongo',
host: 'localhost',
port: 27017,
// user: 'username',
// password: 'password',
database: 'sails_test'
}
},
models: {
connection: 'mongo'
}
我已经在 development.js 中以及分别在 connections.js 和 models.js 中尝试过以上方法。没有区别。
在User.js中:
attributes: {
FirstName : { type: 'string' },
LastName : { type: 'string' },
Email : { type: 'string' },
Password : { type: 'string' },
JobTitle : { type: 'string' }
}
我的前端请求:
$.ajax({
method: 'post',
url: '/user',
data: {
FirstName: 'Yo',
LastName: 'Momma',
Email: 'yourmom@yourdadshouse.com',
Password: 'YouWish123',
JobTitle: 'Home Maker Extraordinaire'
},
success: function (sailsResponse)
{
$('#result').html(sailsResponse).fadeIn();
},
error: function()
{
console.log('error');
}
});
同样,none 产生了一个显式错误。没有任何东西被插入到数据库中。或者如果有,我不知道如何找到它。我已经在 mongo shell 中确认了这个数据库的存在,因此:
show dbs
我的数据库 sails_test
出现在列表中。我已经确认里面没有任何东西:
db.sails_test.find()
非常感谢这里的一些指导:)
更新:
事实证明数据写入正常。我只是无法从命令行查询数据库。我通过首先创建一个示例用户,然后使用 Waterline 的 findOne()
方法来确认这一点:
User.findOne({FirstName: params.FirstName}).exec(function (err, user) {
if (err) {
res.send(400);
} else if (user) {
return res.json({firstName: user.FirstName, lastName: user.LastName, jobTitle: user.JobTitle, email: user.Email, password: user.Password});
} else {
return res.send('no users match those criteria');
}
});
以上按预期工作。所以我现在的问题很简单,我无法从命令行与数据库交互。 db.<collectionName>.find({})
什么都不产生。
这只是未能理解 MongoDb 文档。当你确实需要使用 db
时,我将 db.collection.find({})
读为 DatabaseName.CollectionName.find({})
。所以如果我的数据库是Test,我的集合是Users,查询就是use Test
,然后就是db.Users.find({})
。
另外值得注意的是,3T Mongo Chef 是一个用于 nosql 数据库的非常棒的 GUI(图形用户界面),非商业用途是免费的。
我一直在 SO 和 Sailsjs.org 试图找出问题所在,但无济于事。只是想学习 SailsJS 的基础知识。我有一个 UserController,当 POST
请求发送到 /user
时,会调用其 create()
方法。
create: function (req, res) {
var params = req.params.all();
User.create({
name: params.FirstName + ' ' + params.LastName,
email: params.Email,
password: params.Password,
jobTitle: params.JobTitle
}).exec(function createCB(err,created)
{
created.save(function(err)
{
// No error . . . still nothing in db
});
return res.json({name: created.name, jobTitle: created.jobTitle, email: created.email, password: created.password});
});
}
这里没有错误。所有请求参数都正常,并且可以毫无问题地返回给客户端。但实际上没有任何内容写入数据库。
在development.js中:
connections: {
mongo: {
adapter: 'sails-mongo',
host: 'localhost',
port: 27017,
// user: 'username',
// password: 'password',
database: 'sails_test'
}
},
models: {
connection: 'mongo'
}
我已经在 development.js 中以及分别在 connections.js 和 models.js 中尝试过以上方法。没有区别。
在User.js中:
attributes: {
FirstName : { type: 'string' },
LastName : { type: 'string' },
Email : { type: 'string' },
Password : { type: 'string' },
JobTitle : { type: 'string' }
}
我的前端请求:
$.ajax({
method: 'post',
url: '/user',
data: {
FirstName: 'Yo',
LastName: 'Momma',
Email: 'yourmom@yourdadshouse.com',
Password: 'YouWish123',
JobTitle: 'Home Maker Extraordinaire'
},
success: function (sailsResponse)
{
$('#result').html(sailsResponse).fadeIn();
},
error: function()
{
console.log('error');
}
});
同样,none 产生了一个显式错误。没有任何东西被插入到数据库中。或者如果有,我不知道如何找到它。我已经在 mongo shell 中确认了这个数据库的存在,因此:
show dbs
我的数据库 sails_test
出现在列表中。我已经确认里面没有任何东西:
db.sails_test.find()
非常感谢这里的一些指导:)
更新:
事实证明数据写入正常。我只是无法从命令行查询数据库。我通过首先创建一个示例用户,然后使用 Waterline 的 findOne()
方法来确认这一点:
User.findOne({FirstName: params.FirstName}).exec(function (err, user) {
if (err) {
res.send(400);
} else if (user) {
return res.json({firstName: user.FirstName, lastName: user.LastName, jobTitle: user.JobTitle, email: user.Email, password: user.Password});
} else {
return res.send('no users match those criteria');
}
});
以上按预期工作。所以我现在的问题很简单,我无法从命令行与数据库交互。 db.<collectionName>.find({})
什么都不产生。
这只是未能理解 MongoDb 文档。当你确实需要使用 db
时,我将 db.collection.find({})
读为 DatabaseName.CollectionName.find({})
。所以如果我的数据库是Test,我的集合是Users,查询就是use Test
,然后就是db.Users.find({})
。
另外值得注意的是,3T Mongo Chef 是一个用于 nosql 数据库的非常棒的 GUI(图形用户界面),非商业用途是免费的。