wake-up-neo.net

Node.js übergibt Parameter per Express-Rendering an den Client

Ich benutze Node.js und habe Probleme mit einem Client zu kommunizieren.

Ich definiere Express:

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

Wenn ich versuche, beim Anfordern einer Seite einen Parameter an den Client zu übergeben, enthält die Variable keine Daten. Beispiel:

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

Wenn ich auf der Indexseite die Konsole zum Drucken der Variablen (name) verwende, wird "" zurückgegeben.

Weitere Informationen: http://expressjs.com/api.html#app.render

Vermisse ich etwas oder mache ich etwas falsch?

10
g571792

Die an die Render-Funktion gesendete Variable name ist nur beim Rendern der Seite verfügbar. Nachdem sie an den Client gesendet wurde, ist sie nicht mehr zugänglich. Sie müssen es in Ihrer Ansicht auf der Rendering-Stufe verwenden.

Da Sie einen Lenker verwenden, können Sie ihn auf Ihrer Seite wie folgt anzeigen:

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

Wenn Sie diese Daten in einem Javascript verwenden möchten, verwenden Sie sie innerhalb eines script-Tags:

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

Im Grunde sagen Sie express, Ihre Indexseite zu rendern und einen Wert für die Variable name anzugeben, aber dies macht die Variable name var nicht notwendigerweise in Ihrem clientseitigen Javascript verfügbar. Sie müssen Ihre Indexvorlage bearbeiten, um die Variable name auf der Seite anzuzeigen. Die Syntax variiert je nach verwendeter Templat-Engine (Jade, Ejs, Dustjs).

Eine andere Lösung ist die Verwendung eines Ajax-Aufrufs im Javascript Ihrer Client-Seite. Verwenden Sie stattdessen res.json auf dem Server, um die Daten zu senden. Dann können Sie name in der Konsole auswerten. Ex mit 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.

Wenn Sie Parameter auf der Clientseite über Javascript abrufen möchten, sollten Sie eine Vorlage wie diese <script>var data = data</script> verwenden, andernfalls sind keine Variablen verfügbar

Wenn Sie Jade verwenden, wird es ungefähr so ​​aussehen:

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

Datenliste von Knoten js an HTML übergeben

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