Объединение документов из отдельных коллекций в mongoDB ATLAS для вывода их в виде таблицы в файл e js - PullRequest
0 голосов
/ 11 апреля 2020

Недавно я задал несколько вопросов, но я не думаю, что они были достаточно подробными, чтобы получить правильный ответ.

Я новичок в node.js, и сейчас я делаю заявление, которое хранит данные пользователей в mongoDB ATLAS. я сохраняю данные для входа в систему в коллекции, называемой пользователями, и сохраняю их работу в коллекции, называемой проектами. Я пытаюсь вывести информацию о работе (проекте) пользователей только относительно них на их домашнем экране, как только они войдут в систему. Сначала я пытаюсь найти и прочитать две коллекции с помощью методов в моем файле приложения. js, затем присоединение к ним, чтобы связать, что работа для какого пользователя. затем вывод их в моем файле e js в виде таблицы. Тем не менее, я чувствую, что сделал это совершенно неправильно. ниже - файл моего приложения. js, а под маршрутами я помещаю методы find () и $ lookup. Я уверен, что это совершенно неправильно, но мне не повезло.

    const express = require('express');


    const expressLayouts = require('express-ejs-layouts');
    const mongoose = require('mongoose');
    const flash = require('connect-flash');
    const session = require('express-session');
    const passport = require('passport');


    const app = express ();


    require('./connections/passport')(passport);

    const db = require('./connections/dblink').MongoURI;


    mongoose.connect(db, {useNewUrlParser: true})
    .then(() => console.log('Connected Successfully'))
    .catch(err => console.log(err));

    app.set('view engine', 'ejs')
    app.use(expressLayouts);


    app.use(express.urlencoded({extended: true}));

    // Express Session
    app.use(session({
        secret: 'psst', 
        resave: true,
        saveUninitialized: true
    }));


    app.use(passport.initialize());
    app.use(passport.session());
    app.use(express.static('public'));


    app.use(flash());


    app.use((req, res, next) =>{
        res.locals.good = req.flash('good');
        res.locals.bad = req.flash('bad');
        res.locals.error = req.flash('error');
        next();
    });





        // ========================
        // Routes
        // ========================

        app.get('/projects', (req, res) => {
            db.collection('projects').find().toArray()
              .then(projects => {
                res.render('homepage.ejs', { projects: projects })
              })
              .catch(/* ... */)
          })

        app.get('/users', (req, res) => {
            db.collection('users').find().toArray()
              .then(projects => {
                res.render('homepage.ejs', { users: users })
              })
              .catch(/* ... */)
          })


        app.get('/projects', (req, res) => {
        db.collection('projects').aggregate([
        { $lookup:
          {
            from: 'users',
            localField: 'username',
            foreignField: 'projecttitle',
            as: 'activeuserprojects'
          }
        }
      ]).toArray(function(err, res) {
        if (err) throw err;
        console.log(JSON.stringify(res));
        db.close();
      });
    });
          app.post('/activeuserprojects', (req, res) => {
            projectsCollection.insertOne(req.body)
              .then(result => {
                res.redirect('/')
              })
              .catch(error => console.error(error))
          })





app.use('/', require('./pathways/index'));
app.use('/users', require('./pathways/users'));








//create port to run scheduling app on
const PORT = process.env.PORT || 1000;

app.listen (PORT, console.log (The server has successfully started on port:${PORT}));

Я прошу прощения, если я сделал это неправильно, но я надеюсь вывести данные на Зарегистрированные пользователи homepage.e js в таблице, отображающей их работу, показанную ниже

<section data-position="projects">
                <table class="table table-bordered">
                    <thead>
                        <tr>
                            <th>Project Title</th>
                            <th>Project ID</th>
                            <th>Due Date</th>
                            <th>Project Details</th>
                            <th>Edit/Delete</th>
                        </tr>
                    </thead>

                    <tbody>
                      <% for(var i = 0; i < projects.length; i++) {%>
                        <tr>
                          <td><%= projects[i].projecttitle %></td>
                          <td><%= projects[i].projectid %></td>
                          <td><%= projects[i].date %></td>
                          <td><%= projects[i].projectdetails%></td>

                            <td>
                                <a class="add" title="Add" data-toggle="tooltip"><i class="material-icons">&#xE03B;</i></a>
                                <a class="edit" title="Edit" data-toggle="tooltip"><i class="material-icons">&#xE254;</i></a>
                                <a class="delete" title="Delete" data-toggle="tooltip"><i class="material-icons">&#xE872;</i></a>
                            </td>

                          </tr>
                      </tbody>
                      <% } %>

                </table>
              </section>

, затем каждый раз, когда я пытаюсь проверить это, это выдает ^^^ enter image description here

Я точно знаю, что это будет не единственная проблема, однако это первая проблема, которая мешает мне двигаться вперед.

Если бы кто-то мог ответить мне тем, что мне нужно чтобы решить эту проблему, мы будем очень признательны, и если вам нужно больше кода, пожалуйста, дайте мне знать. Большое спасибо

...