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?
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>
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" });
});
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}
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')