Я хочу преобразовать двоичный _id mongodb в UUID с помощью узла, чтобы найти и найти ответ на этом посте :
Я хочу вставить этот UUId в базу данных postgres.моя функция pg на node.js:
function insert(arg) {
console.log('insert location');
arg.forEach(element => {
(async () => {
await pool.query(
`insert into public."Location" ("Id", "Lat", "Lng", "CreationDateTime", "DeviceId", "Topic", "UserId")
VALUES ('${uuidv1()}', ${element.Lat}, ${element.Lng}, $1, ${element.DeviceId}, $2, $3)`,[element.CreationDateTime, element.Topic,Bin2HexUUID(element.UserId)]);
})();
});
}
Это element.UserId
:
Binary {_bsontype: "Binary", sub_type: 4, position: 16, …}
_bsontype:"Binary"
, и это Bin2HexUUID
метод:
function Bin2HexUUID(bin){
var hex = new Buffer.alloc(bin, 'base64').toString('hex');
return hex.replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, function (){
return arguments[1]+"-"+arguments[2]+"-"+arguments[3]+"-"+arguments[4]+"-"+arguments[5];
});
}
Когда я запускаю скрипт, я получаю эту ошибку:
new Buffer.alloc(bin, 'base64').toString('hex')
NodeError: The "size" argument must be of type number. Received type object
----------------------
(node:2292) UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]: The "size" argument must be of type number. Received type object
Впервые я использовал new Buffer(bin, 'base64').toString('hex')
, но, похоже, новый буфер устарел ..
Это моя версия Node и Npm:
node -v
v10.8.0
npm -v
6.2.0