Почему данные, хранящиеся в MongoDB, не отображаются в файле HTML с помощью усов? - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь запустить веб-приложение для отображения некоторых данных базы данных на HTML-странице.Данные хранятся в базе данных MongoDB и отображаются на HTML-странице с помощью усов.Но когда я пытаюсь запустить эту программу, она ничего не показывает.В чем может быть проблема?Я забыл импортировать что-то, связанное с усами?Я неправильно отправляю данные в HTML?Весь код доступен ниже.

Код JS узла:

var express = require("express"),
    consolidate =  require("consolidate"),
    MongoClient = require("mongodb").MongoClient,
    Server = require("mongodb").Server;

var app = express();

var errMsg = "";
var name = "";

app.engine('html', consolidate.hogan);
app.set("views", "static");

MongoClient.connect("mongodb://localhost:27018", { useNewUrlParser: true },  (err, db)=>{
    dbo = db.db("incidents_db");
    if(err) throw err;
    app.get("/", function(req, res){
        dbo.collection("incidents").find((err, doc) =>{
            if(err) throw err;
            res.render("main.html", doc);
        });


    });

    app.get("/incident", function(req, res){
        res.render("incident.html", {username: name});
    });

    app.get("/authentication", function(req, res){
        res.render("authentication.html", {errMsg: errMsg});
    });


    app.use(express.static('main'));
    app.listen(8080);
});

HTML-код (таблица):

<table>
            <thead>
                <th class="th1">Description</th>
                <th class="th2">Address</th>
                <th class="th3">Reported by</th>
                <th >Date</th>
            </thead>
            {{#incidents}}
            <tr>
                <td class="th1">{{description}}</td>
                <td class="th2">{{address}}</td>
                <td class="th3">{{author}}</td>
                <td class="th4">{{date}}</td>
            </tr>
            {{/incidents}}
  </table>

JSON-объект

 {"incidents":[
        {"description": "This is a example of report.", 
         "address": "5th Street", 
         "author": "Bob", 
         "date": "16/02/19"}]}

1 Ответ

0 голосов
/ 14 марта 2019

Я попытался запустить ваш код, и сейчас есть несколько проблем. Прежде всего, вы пытаетесь обернуть все ваше экспресс-приложение в обратный вызов MongoClient.connect(). Что вы хотите сделать, это, вероятно, подключиться к базе данных и инициализировать его в первую очередь. После инициализации вы сможете выполнять запросы в ваших маршрутах.

Вы можете сделать это, инициализируя переменную и затем назначая ей курсор.

var database;

MongoClient.connect("mongodb://localhost:27018/incidents_db", { 
    useNewUrlParser: true 
    },  
    (err, db) => {
    if(err) throw err;
    database = db;
});

Если вам нужны пояснения о том, как это сделать, вы можете проверить вопрос Как я могу подключиться к mongodb, используя экспресс без mongoose?

Затем вы можете обратиться к базе данных вашего роутера.

app.get("/", function(req, res){
    database.collection("incidents").find((err, doc) =>{
         if(err) throw err;
    res.render("main.html", {'incidents': doc });
   });
});

app.use(express.static('main'));
app.listen(8080);

Вы устанавливаете каталог представлений на static, верно? У вас есть папка с main.html? Если нет, то ничего не будет отображено.

При вероятности сбоя монго-соединения вы можете попытаться напрямую передать объект в шаблон представления и увидеть, что значения отображаются так, как вы ожидаете.

app.get("/incident", function(req, res){
    res.render("incident.html",  {"incidents":[
        {"description": "This is a example of report.", 
         "address": "5th Street", 
         "author": "Bob", 
         "date": "16/02/19"}]});
});
...