it-roy-ru.com

Node.js передает параметры клиенту с помощью экспресс-рендеринга

Я использую Node.js и у меня возникают проблемы при общении с клиентом.

Я определяю Экспресс:

var express             = require("express");
var app                 = express();`

Когда я пытаюсь передать параметр клиенту после запроса страницы, переменная не содержит данных, например:

app.get("/", function(req, res){
    res.render("index", { name: "example" });
});

На странице индекса, когда я использую консоль для печати переменной (name), она возвращает "".

Дополнительная информация: http://expressjs.com/api.html#app.render

Я что-то упускаю или делаю что-то не так?

10
g571792

Переменная name, отправленная вами в функцию рендеринга, доступна только во время рендеринга страницы, после того как она отправлена ​​клиенту, она недоступна. Вы должны использовать его в своем представлении на этапе рендеринга.

Поскольку вы используете руль, вы можете отобразить его на своей странице, например, так:

<h1>{{ name }}</h1>

Если вы хотите использовать эти данные в javascript, используйте их внутри тега script:

<script>
  var name = "{{ name }}";
  console.log(name);
</script>
12
victorkohl

Вы, в основном, говорите, что express отображает вашу индексную страницу и указываете значение переменной name, но это не обязательно делает переменную name доступной в вашем клиентском javascript. Вам нужно отредактировать ваш индексный шаблон, чтобы отобразить переменную name на странице . Синтаксис зависит от используемого вами движка шаблонов (jade, ejs, dustjs).

Другое решение - использовать ajax-вызов в javascript вашей клиентской страницы и вместо этого использовать res.json на сервере для отправки данных. Затем вы можете оценить name в консоли. Например, используя jquery:

index.html:

$.get( "/getvar", function( data ) {
  name = data.name;
});

server.js:

app.get("/getvar", function(req, res){
    res.json({ name: "example" });
});
8
Jean-Marc S.

Если вы хотите получить параметры на стороне клиента через javascript, вы должны сделать шаблон как этот <script>var data = data</script>, иначе переменные не будут доступны

Если вы используете Jade, это будет примерно так:

script(type='text/javascript').
    var name = !{name}
1
marsh

Передача списка данных из узла js в html

server.js

var http = require('http');
var express = require('express');
var sqlite3 = require('sqlite3').verbose();
var bodyParser = require('body-parser');
var path    = require("path");

console.log('Server running at http://127.0.0.1:8081/');

var __dirname = "D:/html-files";
var app = express();
var urlencodedParser = bodyParser.urlencoded({ extended: false })

var engine = require('consolidate');

app.engine('html', engine.mustache);
app.use(express.static('./'));

app.get('/', function(req, res) {

    res.render('index.html');   

});

app.post('/', function (req, res) {
   console.log("Got a POST request for the homepage");
   res.send('Hello POST');
});

app.post('/get-user-list', urlencodedParser, function (req, res) {

    let db = new sqlite3.Database('user.db', sqlite3.OPEN_READWRITE, (err) => {
        if (err) {
            console.error(err.message);
        }
        console.log('Connected to the user database.');
        console.log("ID" + "\t" + "NAME" + "\t" + "EMAIL");
    });

    db.serialize(() => {     

        var dataList = "";

        db.each('SELECT id, name, email FROM USER ', (err, row) => {
            if (err) {
                console.error(err.message);
            }
            if(dataList != "")
            dataList = dataList + ',';

            dataList = dataList + '{"id":"' + row.ID + '","name":"' + row.NAME + '","email":"' + row.EMAIL + '"}';
            console.log("dataList : " + dataList);
        });

        db.close((err) => {
            if (err) {
                console.error(err.message);
            }
            console.log('Close the database connection.');
            response = {'username':dataList};                           
            aFunction(res, dataList);

        });

    });

});

var aFunction = function(res, dataList) {
    console.log('return to page.');
    console.log("dataList : " + dataList);
    res.render(__dirname + "/list-all-users.html", response);
};

app.listen(8081, '127.0.0.1')
0
Rahamath