Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

161
Visualizações
node.js express solo devuelve elementos relacionados con el usuario

Solo quiero devolver las transacciones que pertenecen al usuario actualmente conectado. Guardo el usuario dentro del encabezado de cada solicitud. En cada oficio tengo guardado el creador.

Mi método GET se ve así:

 exports.getTrades = (req, res, next) => { const tradeQuery = Trade.find(); let fetchTrades; tradeQuery .then((trades) => { fetchTrades = trades.filter((t) => t.creator._id === req.userData.userId); <--- return; }) .then((count) => { res.status(200).json({ message: "Trades fetched successfully!", trades: fetchTrades, }); }) .catch((error) => { res.status(500).json({ message: "Fetching trades failed!", }); }); };

Intenté registrar en la consola los dos atributos que comparo dentro de mi filtro manualmente, y en realidad hay intercambios en los que ambos son iguales. Sin embargo, fetchTrades permanece vacío.

Realmente agradecería algunas ideas.

Aquí están los dos modelos:

usuario.js:

 const mongoose = require("mongoose"); const uniqueValidator = require("mongoose-unique-validator"); const userSchema = mongoose.Schema({ email: { type: String, required: true, unique: true }, password: { type: String, required: true }, }); userSchema.plugin(uniqueValidator); module.exports = mongoose.model("User", userSchema);

comercio.js:

 const mongoose = require("mongoose"); const tradeSchema = mongoose.Schema({ pair: { type: String, required: true }, type: { type: String, required: true }, resultAmount: { type: Number, required: true }, date: { type: Date, required: true }, time: { type: Date, required: true }, creator: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true, }, leverage: { type: Number }, entry: { type: Number }, exit: { type: Number }, lessonLearned: { type: String }, }); module.exports = mongoose.model("Trade", tradeSchema);

EDITAR: así es como se ve el comercio:

 { _id: 6245bf565043276fb456cb6a, pair: 'BTCUSD', type: 'long', resultAmount: 239, time: 2022-03-22T23:00:00.000Z, date: 2022-03-31T14:48:28.916Z, creator: 62409c68e17cae2d68a99b3b, leverage: 20, entry: 1.2321, exit: 1.2377, lessonLearned: 'I was good man', __v: 0 }

EDIT2: Gracias a @vicki. Tuve que usar "==" en lugar de "===" dentro de mi función de filtro.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Hay un error en el uso de la función de filtro. No devuelve nada en lugar de entradas coincidentes.

 tradeQuery .then((trades) => { fetchTrades = trades.filter((t) => t.creator._id === req.userData.userId); return; })

Este es su uso. cambiarlo como

 tradeQuery .then((trades) => { fetchTrades = trades.filter((t) => return t.creator._id === req.userData.userId); })

Esto posiblemente debería solucionar su problema. Agregar un fragmento js

 let trades = [{ "id": 1, "name": 'asd' }, { "id": 2, "name": 'qwe' }, { "id": 1, "name": 'efg' }] let fetchTrades { fetchTrades = trades.filter((t) => { t.id === 1; return }) } console.log('improper usage',fetchTrades) { fetchTrades = trades.filter((t) => { return t.id === 1; }) } console.log('Proper usage',fetchTrades)

EDITAR: Puede haber problemas al comparar ObjectID, usar === también verificará el tipo. Por lo tanto, es recomendable usar t.creator._id.equals(req.userData.userId) o == . Como señaló @ApoorvaChikara, no use la declaración de devolución dentro de la función de filtro.

about 4 years ago · Juan Pablo Isaza Relatório

0

lo que me ayudó a realizar el filtrado es el método mongoose find(). puede pasar un campo que desee hacer coincidir con un ID de usuario. para hacer esto, implementé un archivo de repositorio que exporta todas las funciones de consulta de db. en mi caso, quiero obtener todos los períodos de un usuario específico.

mi period.repo.ts se ve así:

 // period.repo.ts import Period from '../models/period.model'; class PeriodRepository { findAllFromUser(userId: String) { return Period.find({ userId: userId }); } } export default new PeriodRepository();

luego, en mi archivo de servicio que contiene mi lógica comercial para el backend, importo y uso el archivo de repositorio de esta manera:

 // period.service.ts import PeriodRepository from './period.repository'; getCycle(req, res) { let cycleLength = 1; let lastPeriod; PeriodRepository.findAllFromUser(req.params.userId) .then((periods) => { cycleLength = periodHelper.calcAverageCycleLength(periods, 0); if (lastPeriod?.endDate) { return res.status(200).json({ message: 'predictions fetched', cycleLength: cycleLength, }); } else { return res.status(200).json({ message: 'period is active', remainingDaysPeriod: 0, remainingDaysOvaluation: 0, }); } }) .catch((error) => { return res.status(500).json({ message: 'fetching periods failed', }); }); }

de esta manera solo consulto los documentos que pertenecen al usuario seleccionado.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda