Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

164
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!