J'utilise Node.js et j'ai des problèmes de communication avec un client.
Je définis Express:
var express = require("express");
var app = express();`
Lorsque j'essaie de transmettre un paramètre au client lors de la demande d'une page, la variable ne contient aucune donnée, par exemple:
app.get("/", function(req, res){
res.render("index", { name: "example" });
});
Sur la page d'index, lorsque j'utilise la console pour imprimer la variable (name
), il renvoie ""
.
Plus d'infos: http://expressjs.com/api.html#app.render
Est-ce que je manque quelque chose ou fais quelque chose de mal?
La variable name
que vous avez envoyée à la fonction de rendu est uniquement disponible lors du rendu de la page. Après son envoi au client, elle n'est pas accessible. Vous devez l'utiliser dans votre vision de la phase de rendu.
Puisque vous utilisez un guidon, vous pouvez l'afficher dans votre page comme ceci, par exemple:
<h1>{{ name }}</h1>
Si vous souhaitez utiliser ces données dans un javascript, utilisez-les dans une balise script
:
<script>
var name = "{{ name }}";
console.log(name);
</script>
En gros, vous dites à express de rendre votre page d'index et vous fournissez une valeur pour la variable name
, mais cela ne rend pas nécessairement la name
var disponible dans votre javascript côté client. Vous devez modifier votre modèle d’index pour afficher la variable name
dans la page . La syntaxe varie en fonction du moteur de modélisation que vous utilisez (jade, ejs, dustjs).
Une autre solution consiste à utiliser un appel ajax dans le javascript de votre page client et à utiliser res.json
sur le serveur à la place pour envoyer les données. Ensuite, vous pouvez évaluer name
dans la console. Ex utilisant jquery:
index.html:
$.get( "/getvar", function( data ) {
name = data.name;
});
server.js:
app.get("/getvar", function(req, res){
res.json({ name: "example" });
});
Si vous voulez obtenir des paramètres sur le côté client via javascript, vous devriez faire un template comme ceci <script>var data = data</script>
, sinon les variables ne sont pas disponibles
Si vous utilisez Jade, cela ressemblera à ceci:
script(type='text/javascript').
var name = !{name}
Passer la liste des données du noeud 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')