我想问个问题。我正在使用sails.js和PostgreSQL开发一个应用程序(使用sails-postgresql模块)。我使用UUID作为主键类型,而不是整数。但是,当我试图向数据库中插入数据时,会出现一些错误。
我的UserModel.js模型
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
}
}
};我在控制器中的创建函数
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('/');
}误差
/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我希望你能帮我。谢谢你的关注:)
发布于 2015-07-07 03:58:29
试试这个:
模型
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
}
}
};控制器
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);
}migrate,而是在模型配置上。uuidv4也不是一个有效的属性。id字段是必要的,当您使用Blueprint API时,在node_modules的帆中照顾actionUtil上的蓝图挂钩。res.redirect。进程,当查询尚未完成时,它将给出竞争条件,您将被重定向。实际上,我不太确定它是否能解决你的问题,但你可以试一试,然后再给出结果。
https://stackoverflow.com/questions/31258754
复制相似问题