首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sails.js和postgreSQL时出错(使用sails-postgresql模块)

使用sails.js和postgreSQL时出错(使用sails-postgresql模块)
EN

Stack Overflow用户
提问于 2015-07-07 02:27:49
回答 1查看 727关注 0票数 1

我想问个问题。我正在使用sails.js和PostgreSQL开发一个应用程序(使用sails-postgresql模块)。我使用UUID作为主键类型,而不是整数。但是,当我试图向数据库中插入数据时,会出现一些错误。

我的UserModel.js模型

代码语言:javascript
复制
var uuid = require('node-uuid'); 

module.exports = {

    adapter: 'somePostgresqlServer',
    autoPK: false,
    migrate: 'safe',
    attributes: {
        ID: {
            primaryKey: true,
            type: 'string',
            defaultsTo: function (){
                return uuid.v4(); 
            },
            unique: true,
            index: true,
            uuidv4: true
        },

        username: {
            type: 'string',
            required: true,
            unique: true
        }   
    }
};

我在控制器中的创建函数

代码语言:javascript
复制
create: function(req, res) {
        if (!req.param('_username') || !req.param('_newPassword') ||
            !req.param('_confirmPassword') || !req.param('_emailAddress') ||
            !req.param('_firstName') || !req.param('_lastName')) {
            var errorMessage = ["All field are required to sign up"];
            req.session.flash = {
                err : errorMessage
            }
            res.redirect('/login');
            return;
        }

        if (req.param('_newPassword') != req.param('_confirmPassword')) {
            var errorMessage = ["New password and confirm password must be same"];
            req.session.flash = {
                err : errorMessage
            }
            res.redirect('/login');
            return; 
        }

        UserModel.create({
            username: req.param('_username'),
            encryptedPassword: req.param('_newPassword'),
            emailAddress: req.param('_emailAddress'),
            firstName: req.param('_firstName'),
            lastName: req.param('_lastName')
        }).exec(function(err,post) {
            if (err) {
                return res.error();
            }

            res.redirect('/');
        })

        res.redirect('/');
    }

误差

代码语言:javascript
复制
/home/***/***/***/node_modules/sails-postgresql/lib/adapter.js:393
        Object.keys(collection.schema).forEach(function(schemaKey) {
               ^
TypeError: Object.keys called on non-object
    at Function.keys (native)
    at __CREATE__ (/home/***/***/***/node_modules/sails-postgresql/lib/adapter.js:393:16)
    at after (/home/***/***/***/node_modules/sails-postgresql/lib/adapter.js:1155:7)
    at /home/***/***/***/node_modules/sails-postgresql/lib/adapter.js:1049:7
    at /home/***/***/***/node_modules/sails-postgresql/node_modules/pg/lib/pool.js:77:9
    at dispense (/***/***/***/node_modules/sails-postgresql/node_modules/pg/node_modules/generic-pool/lib/generic-pool.js:250:16)
    at Object.me.acquire (/home/***/***/***/node_modules/sails-postgresql/node_modules/pg/node_modules/generic-pool/lib/generic-pool.js:319:5)
    at Object.pool.connect (/home/***/***/***/node_modules/sails-postgresql/node_modules/pg/lib/pool.js:71:12)
    at PG.connect (/home/***/***/***/node_modules/sails-postgresql/node_modules/pg/lib/index.js:49:8)
    at spawnConnection (/home/***/***/***/node_modules/sails-postgresql/lib/adapter.js:1048:8)
    at Object.module.exports.adapter.create (/home/***/***/***/node_modules/sails-postgresql/lib/adapter.js:361:7)
    at module.exports.create (/usr/lib/node_modules/sails/node_modules/waterline/lib/waterline/adapter/dql.js:84:13)
    at bound.createValues (/usr/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/dql/create.js:214:16)
    at /usr/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/dql/create.js:74:20
    at /usr/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:708:13
    at /usr/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:49:16

我希望你能帮我。谢谢你的关注:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-07 03:58:29

试试这个:

模型

代码语言:javascript
复制
    var uuid = require('node-uuid'); 

    module.exports = {

        adapter: 'somePostgresqlServer',
        autoPK: false,
        attributes: {
            id: {
                primaryKey : true,
                type       : 'string',
                defaultsTo : function (){
                    return uuid.v4(); 
                },
                unique     : true,
                index      : true
            },

            username: {
                type     : 'string',
                required : true,
                unique   : true
            }
        }
    };

控制器

代码语言:javascript
复制
    create: function(req, res) {
        var username        = req.param('_username'),
            newPassword     = req.param('_newPassword'),
            confirmPassword = req.param('_confirmPassword'),
            emailAddress    = req.param('_emailAddress'),
            firstName       = req.param('_firstName'),
            lastName        = req.param('_lastName');

        if (!(username || newPassword || confirmPassword || emailAddress || firstName || lastName)) {
            var errorMessage = ["All field are required to sign up"];
            req.session.flash = {
                err : errorMessage
            }
            return res.redirect('/login');
        }

        if (newPassword != confirmPassword) {
            var errorMessage = ["New password and confirm password must be same"];
            req.session.flash = {
                err : errorMessage
            }
            return res.redirect('/login');
        }

        UserModel
          .create({
            username          : username,
            encryptedPassword : newPassword,
            emailAddress      : emailAddress,
            firstName         : firstName,
            lastName          : lastName
          })
          .then(function(post) {
            res.redirect('/');
          })
          .catch(res.negotiate);
    }
  1. 在模型定义时,不存在migrate,而是在模型配置上。
  2. uuidv4也不是一个有效的属性。
  3. id字段是必要的,当您使用Blueprint API时,在node_modules的帆中照顾actionUtil上的蓝图挂钩。
  4. 当您有异步时,不要在控制器的末尾调用res.redirect。进程,当查询尚未完成时,它将给出竞争条件,您将被重定向。

实际上,我不太确定它是否能解决你的问题,但你可以试一试,然后再给出结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31258754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档