Как отправить данные с роутера на express шаблон руля - PullRequest
0 голосов
/ 18 февраля 2020

Я с трудом пытаюсь получить данные, извлеченные из БД postgres через маршрутизатор, в шаблон руля.

Это структура папок:

-node_modules
-public
-routes
--api
---db.js
-views
--layouts
---main.handlebars
--index.handlebars
-index.js

Здесь пример запроса в файле db. js:

//get all users
router.get("/", (req, res) => {
  db.result("SELECT * FROM users ORDER BY id")
    .then(data => {
      res.json(data.rows);
    })
    .catch(error => {
      return console.log("error");
    });
});

И я хочу, чтобы эти данные отображались в шаблоне.

Это индекс. js file:

const users = require('./routes/api/db')

const app = express();

//init middleware
app.use(logger);

//handle bars middle
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');

// body parser
app.use(express.json());
app.use(express.urlencoded({extended: false}));

//render
// app.get('/', users.getAllUsers);

app.get('/displaydata', (req,res)=> {
    res.render('index', {
        title: 'DATA',

/* HOW DO I GET THE DATA TO BE DISPLAYED OVER HERE?*/

    });
});

//members api routes
app.use('/api/db', users);

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

Хорошо, так что я понял это. Я все еще учу express, поэтому я не уверен, что это самый чистый способ.

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

router.get("/", (req, res) => {
let dbData;
db.result("SELECT * FROM users ORDER BY id asc")
    .then(data => {
        dbData = data.rows;
        res.render('membersView', {
            title: 'Users',
            dbData
        })
    })
    .catch(error => {
        return console.log("error");
    });
});

Затем я смог отобразить его в шаблоне руля :

<h2 class="mt-5 mb-5 text-center" id="ok">{{ title }}</h2>

<table class="table">
  <thead>
    <tr>
      <th scope="col">ID</th>
      <th scope="col">Name</th>
      <th scope="col">Email</th>
      <th scope="col">Active</th>
    </tr>
  </thead>
  <tbody>
    {{#each dbData }}
    <tr>
      <th scope="row">{{ id }}</th>
      <td>{{ name }}</td>
      <td>{{ email }}</td>
      <td>{{ active }}</td>
    </tr>
    {{/each}}
  </tbody>
</table>
0 голосов
/ 18 февраля 2020

Вы должны изменить ниже, я думаю, ..

// db. js необходимо изменить, как показано ниже

//get all users
// router.get("/", (req, res) => {
module.exports.getUsers = function (reqParams) {
  return new Proimise((resolve, reject) => {
    db.result("SELECT * FROM users ORDER BY id")
      .then(data => resolve(status : true, data: data.rows));
      .catch(error =>reject({status : false, data: error}));
  })
};
// });

// index. js необходимо изменить как показано ниже

const users = require(`/db`);

app.get('/displaydata', async(req, res)=> {
  const reslt = await users.getUsers(req);
  res.render('index', {
      title: 'DATA',
      data: reslt.status ? reslt.data : []
  });
});
...