Я абсолютно новичок в JavaScript и мне было поручено следующее.
Среда: node.js, express, mongodb, mongoose.
Скажем, DB / collection (s) содержат 1000 строк, а каждая строка содержит 50 столбцов.Строка может иметь нулевые значения для определенных столбцов.
Пользователь может ввести определенные фильтры - например, столбец 10, 20 - {'fruit': 'apple', 'price': '$ 20'}.На основе этих фильтров выбираются строки.Но когда ответ дошел до пользователя, отображаются не все столбцы (50 из них).У пользователя есть возможность выбрать столбцы, и только выбранные отображаются.Например, пользователь отправляет запрос с фильтрами выше и column_selected как 5, 9, 21, 40. Максимальное количество фильтров - 7 (пользователь может, например, выбрать только 1 из 7) и любое количество столбцов.(может быть 1, может быть все 50).Запрос должен быть отправлен как «почтовый» запрос.Мне дали следующий код (для columns_selected), но он не возвращает никаких данных.Я написал часть «фильтров» кода, и это тоже не работает.Я также включил образец объекта запроса.Любая помощь будет оценена.После того, как я подвергся JS, у меня даже нет правильного направления для решения этой проблемы.
объект запроса:
объект запроса:
{
"filters": {
"a": "b",
"c": "d",
"3": "abc",
"d": "r"
},
"column_selected": ["a",
"ab",
"sw",
"ff",
"gg"
],
"view_name": "my_view"
}
объект ответа:
Объект ответа:
{
"user_views": [{
"filters": {
"a": "b",
"c": "d",
"3": "abc",
"d": "r"
},
"column_selected": ["a",
"ab",
"sw",
"ff",
"gg"],
"view_name": "my_view"
},
{
"filters": {
"a": "b",
"c": "d",
"3": "abc",
"d": "r"
},
"column_selected": ["a",
"ab",
"sw",
"ff",
"gg"],
"view_name": "my_view2"
}]}
Код для выбранного столбца
const express = require("express");
const url = require("url");
const router = express.Router();
const Data = require("../../models/Data");
const numberOfRecords = 1000;
router.post("", (req, res) => {
columnsSelected = req.body.columnSelected;
console.log(columnsSelected);
var reqColumns = {};
for (each of columnsSelected) reqColumns[each] = 1;
reqColumns["_id"] = 0;
// Data.find(req.body.filters, reqColumns)
Data.find({}, reqColumns)
.skip(req.body.noRows * req.body.pageNumber)
.limit(req.body.noRows)
.then(data => {
console.log("in success");
return res.json({ data: data });
})
.catch(err => {
console.log("in error");
return res.send(err);
});
});
module.exports = router;
Код для фильтров:
const express = require("express");
//const url = require("url");
//const router = express.Router();
const router = require('express').Router();
const Data = require("../../models/Data");
//const numberOfRecords = 1000;
router.get("/getData", function(req, res) {
var filtersSelected = req.body.filters;
Data.collection('getData').find({}, filtersSelected)
.then(data => {
console.log("in success");
return res.json({ data: data });
})
.catch(err => {
console.log("in error");
return res.send(err);
});
});