Как передать данные из ejs (средства выбора даты) в js (для запроса базы данных), а затем отобразить результаты обратно в ejs (в метке)? - PullRequest
0 голосов
/ 29 марта 2019

Я новичок в БД Nodejs / Mongo. Я работаю над созданием простой страницы, где она отображает состояние «Пройдено / Не пройдено» для выбранной даты одним нажатием кнопки.

Я выяснил, как запросить коллекцию Mongo DB, чтобы получить значения Pass и Fail для конкретной даты (эта «дата» должна исходить из html-выбора даты).

Поэтому мне интересно, как сделать его динамичным, чтобы он работал на любую дату, выбранную в DatePicker.

Может кто-нибудь помочь, пожалуйста? Я изо всех сил пытался найти решение.

**userlist.ejs**

<!DOCTYPE html>
<html>
  <head>
    <title>Status</title>

    <link rel='stylesheet' href='/stylesheets/style.css' />
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#datepicker" ).datepicker();
  } );
  </script>
  </head>
  <body>
    <h1>Status</h1>
    <p>Welcome to Status</p>
    Date: <input type="text" id="datepicker">
    <input type="button" id="txbox" value="Find">
    <p>Pass is <%=userlist[0].Passed%></p>
    <p>Fail is <%=userlist[0].Failed%></p>
  </body>
</html>
index.js

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

/* GET Hello World page. */
router.get('/userlist', function(req, res) {
    var db = req.db;
    var collection = db.get('usercollection');
    collection.find({
      $and: [
          {"Date": "29-03-2019"}
        ]
    },function(e,docs){
        res.render('userlist', {
            "userlist" : docs
        });
    });
});

module.exports = router;
DB collection:
Collection name : usercollection
collection name - usercollection

{
Passed:"60"
Failed:"40"
Date: "30-03-2019"
}

{
Passed:"20"
Failed:"80"
Date: "29-03-2019"

Как вы можете видеть, у меня есть жестко закодированная дата в части запроса mongo db - я хочу заменить ее на переменную, которая может содержать значение, переданное в html средства выбора даты (userlist.ejs). Так как мне это сделать?

Приношу свои извинения, если это звучит очень нуб !!!

1 Ответ

1 голос
/ 30 марта 2019

Если вы передаете данные от клиента, вам нужен POST http глагол.Для этого вам нужно POST от клиента и прослушать сообщение на стороне сервера.Следующие изменения должны помочь:

Используйте html form для публикации метода (или вы можете использовать AJAX для публикации)

<form action="/userlist" method="POST">
  <input type="text" id="datepicker">
  <button type="submit" id="txbox" value="submit"><Find<button>
</form>

В вашем роутере вам необходимо прослушать POST запрос как:

router.post('/userlist', function(req, res) {
  // where did you get this?
  var db = req.db;

  // from html form, probably need some parsing
  var date = req.body.datepicker

  var collection = db.get('usercollection');
  collection.find({
    $and: [
      {"Date": date}
    ]
  },function(e,docs){
    res.render('userlist', {
      "userlist" : docs
    });
  });
});

Также вам нужно смонтировать body-parser для разбора тела входящей формы

const bodyparser = require('body-parser');

// app or server, whatever is your express, mount this before any routes
app.use(bodyParser.urlencoded({ extended: false }))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...