我只想回傳屬于當前登錄用戶的交易。我將用戶存盤在每個請求的標頭中。在每筆交易中,我都存盤了創建者。
我的 GET 方法如下所示:
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!",
});
});
};
我嘗試控制臺記錄我在過濾器中手動比較的兩個屬性,實際上有一些交易是相同的。但是 fetchTrades 仍然是空的。
我真的很感激一些想法。
這是兩個模型:
用戶.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);
貿易.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);
編輯:這就是交易的樣子:
{
_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:感謝@vicki。我必須在我的過濾器函式中使用“==”而不是“===”。
uj5u.com熱心網友回復:
您使用過濾器功能時出現錯誤。您沒有回傳任何內容,而是匹配的條目。
tradeQuery
.then((trades) => {
fetchTrades = trades.filter((t) => t.creator._id === req.userData.userId);
return;
})
這是你的用法。將其更改為
tradeQuery
.then((trades) => {
fetchTrades = trades.filter((t) => return t.creator._id === req.userData.userId);
})
這應該可以解決您的問題。添加一個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)
編輯:比較 ObjectID 時可能會出現問題,使用===也會進行型別檢查。因此,建議使用t.creator._id.equals(req.userData.userId)or ==。正如@ApoorvaChikara 指出的那樣,不要在 filter 函式中使用 return 陳述句。
uj5u.com熱心網友回復:
幫助我完成過濾的是貓鼬 find() 方法。您可以傳入要與用戶 ID 匹配的欄位。為了做到這一點,我實作了一個匯出所有資料庫查詢函式的存盤庫檔案。就我而言,我想從特定用戶那里獲取所有時期。
我的 period.repo.ts 看起來像這樣:
// period.repo.ts
import Period from '../models/period.model';
class PeriodRepository {
findAllFromUser(userId: String) {
return Period.find({ userId: userId });
}
}
export default new PeriodRepository();
然后在包含我的后端業務邏輯的服務檔案中,我匯入并使用這樣的 repo 檔案:
// 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',
});
});
}
這樣我只查詢屬于所選用戶的檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/455182.html
標籤:javascript 节点.js 有角度的 jwt
上一篇:如何在Angular中將資料從父級傳遞給子級以更改子級的背景顏色?
下一篇:按陣列屬性的屬性過濾物件陣列
