Mi objetivo es crear disparadores Atlas para sincronizar mi base de datos MongoDB con una base de datos Neo4j (Aura). La función que escribí funciona bien en mi computadora, sin embargo, cuando el disparador la llama, arroja este error:
TypeError: Configured resolver function should either return an array of addresses or a Promise resolved with an array of addresses.Each address is '<host>:<port>'. Got: [object Promise]Esta es la función:
(async () => { const neo4j = require("neo4j-driver"); const uri = "neo4j+s://d3dc4645.databases.neo4j.io"; const user = "neo4j"; const password = "..."; const driver = neo4j.driver(uri, neo4j.auth.basic(user, password)); const session = driver.session(); const id = "TEST" const writeQuery = `MERGE (p1:User {id:$id })`; await session.writeTransaction((tx) => tx.run(writeQuery, { id })); await driver.close(); })();En el disparador es así (esto no funciona):
exports = async function(changeEvent) { const neo4j = require("neo4j-driver"); const uri = "neo4j+s://d3dc4645.databases.neo4j.io"; const user = "neo4j"; const password = "..."; const driver = neo4j.driver(uri, neo4j.auth.basic(user, password)); const session = driver.session(); const id = "TEST" const writeQuery = `MERGE (p1:User {id:$id })`; await session.writeTransaction((tx) => tx.run(writeQuery, { id })); await driver.close(); };Sinceramente, no tengo ni idea de cuál es el problema. Puedo suponer que deriva de alguna incompatibilidad de esa dependencia o, en todo caso, está ligado a la forma en que se gestionan las promesas. ¿Qué estoy haciendo mal?
Sigue siendo un problema limitante para mí...
Actualización después de la respuesta de @NBekelman.
Ya intenté en los días siguientes cambiar el código pero, lamentablemente, el mensaje de error siempre es el mismo.
exports = function(changeEvent) { [...] const driver = neo4j.driver(uri, neo4j.auth.basic(user, password)); const session = driver.session({ defaultAccessMode: neo4j.session.WRTIE }); console.log(session); // <-- so far so good const writeQuery = `MERGE (p1:User {id:"TEST" })`; session.run(writeQuery) // <-- error .then(result => { console.log(result); }) .then(() => session.close()); driver.close(); };Está devolviendo una Promesa, pero la función que está utilizando espera un valor (por el error, el tipo debe ser <host>:<port> ;
También creo que deberías usar
module.exports = ... // default exports exports.handler = ... // named exportsPublique el consumidor de esta función para obtener más ayuda si es necesario.