Sails.js控制器没有插入Mongo数据库

时间:2015-05-17 19:05:44

标签: mongodb sails.js waterline

我一直都在SO和Sailsjs.org试图弄清楚出了什么问题,但无济于事。只是想学习SailsJS的基础知识。我有一个UserController,当create()请求发送到POST时,会调用/user方法。

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');
        }
    });

同样,这些都不会产生明确的错误。没有任何东西插入数据库。或者,如果有,我不知道如何找到它。我已经在mongo shell中确认了这个db的存在,因此:

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({})什么也没有产生。

1 个答案:

答案 0 :(得分:0)

这只是未能理解MongoDb文档。当您真正需要使用db.collection.find({})时,我将DatabaseName.CollectionName.find({})视为db。因此,如果我的数据库是Test,而我的集合是Users,则查询为use Test,然后是db.Users.find({})

另外值得注意的是,3T Mongo Chef是一个非常好的摇滚乐。用于nosql数据库的GUI(图形用户界面),它可以免费用于非商业用途。