UnhandledPromiseRejectionWarning: Error: Property 'password' doesn't exist. pg-promise
UnhandledPromiseRejectionWarning: Error: Property 'password' doesn't exist. pg-promise
我正在使用 pg-promise。
我在尝试插入以下 Javascript 数组时遇到问题:
[ { email: 'test1@gmail.com', password: 'test2' },
{ email: 'tes2t@gmx.com', password: 'test'3 },
{ email: 'test4@gmail.com', password: 'test4' },
{ email: 'test4@yahoo.com.ar', password: 'test5' }]
使用以下内容:
async function insertDB(data){
const cs = new pgp.helpers.ColumnSet(['email', 'password'], {table: 'users'});
console.log(data)
const query = pgp.helpers.insert(data, cs);
db.none(query)
.then(data => {
logger.info(" Query success: ", data);
})
.catch(error => {
logger.warn(" Query error: ", error);
});
}
然后我得到
UnhandledPromiseRejectionWarning: 错误: 属性 'password' 不存在。
**data.password = undefined**
**data[0] = { email: 'test1@gmail.com', password: 'test2' }**
如何将这些数据插入到我的 postgresdb 中?
// should create columnsets only once:
const cs = new pgp.helpers.ColumnSet(['email', 'password'], {table: 'users'});
function insertDB(data) {
// wrapping it into a function is safer, for error-reporting via query methods:
const query = ()=> pgp.helpers.insert(data, cs);
db.none(query)
.then(data => {
// data = null always here, no point displaying it
logger.info('Query success:', data);
})
.catch(error => {
logger.warn('Query error:', error);
});
}
在这种情况下,您的函数不需要 async
。
UnhandledPromiseRejectionWarning: Error: Property 'password' doesn't exist.
您正在混淆 JavaScript 编译器,将函数声明为 async
,然后在生成插入时同步抛出错误,因为缺少 属性 password
.
如果您想插入一些没有密码的记录,例如 null
,请像这样定义您的列集:
const cs = new pgp.helpers.ColumnSet([
'email',
{name: 'password', def: null}
], {table: 'users'});
除此之外,键入 ColumnSet is ultimately flexible, see the documentation for each contained Column。
额外
如果您想使用服务器端的 DEFAULT
值来弥补丢失的密码,您可以在 Custom Type Formatting:
的帮助下提供它
const DEFAULT = {rawType: true, toPostgres: ()=> 'DEFAULT'};
然后您的 password
列可以这样定义:
{name: 'password', def: DEFAULT}
还有很多替代品,init
和 mod
的属性由 Column 支持。
我正在使用 pg-promise。
我在尝试插入以下 Javascript 数组时遇到问题:
[ { email: 'test1@gmail.com', password: 'test2' },
{ email: 'tes2t@gmx.com', password: 'test'3 },
{ email: 'test4@gmail.com', password: 'test4' },
{ email: 'test4@yahoo.com.ar', password: 'test5' }]
使用以下内容:
async function insertDB(data){
const cs = new pgp.helpers.ColumnSet(['email', 'password'], {table: 'users'});
console.log(data)
const query = pgp.helpers.insert(data, cs);
db.none(query)
.then(data => {
logger.info(" Query success: ", data);
})
.catch(error => {
logger.warn(" Query error: ", error);
});
}
然后我得到
UnhandledPromiseRejectionWarning: 错误: 属性 'password' 不存在。
**data.password = undefined**
**data[0] = { email: 'test1@gmail.com', password: 'test2' }**
如何将这些数据插入到我的 postgresdb 中?
// should create columnsets only once:
const cs = new pgp.helpers.ColumnSet(['email', 'password'], {table: 'users'});
function insertDB(data) {
// wrapping it into a function is safer, for error-reporting via query methods:
const query = ()=> pgp.helpers.insert(data, cs);
db.none(query)
.then(data => {
// data = null always here, no point displaying it
logger.info('Query success:', data);
})
.catch(error => {
logger.warn('Query error:', error);
});
}
在这种情况下,您的函数不需要 async
。
UnhandledPromiseRejectionWarning: Error: Property 'password' doesn't exist.
您正在混淆 JavaScript 编译器,将函数声明为 async
,然后在生成插入时同步抛出错误,因为缺少 属性 password
.
如果您想插入一些没有密码的记录,例如 null
,请像这样定义您的列集:
const cs = new pgp.helpers.ColumnSet([
'email',
{name: 'password', def: null}
], {table: 'users'});
除此之外,键入 ColumnSet is ultimately flexible, see the documentation for each contained Column。
额外
如果您想使用服务器端的 DEFAULT
值来弥补丢失的密码,您可以在 Custom Type Formatting:
const DEFAULT = {rawType: true, toPostgres: ()=> 'DEFAULT'};
然后您的 password
列可以这样定义:
{name: 'password', def: DEFAULT}
还有很多替代品,init
和 mod
的属性由 Column 支持。