Node.js服务器和客户端之间的变量 [英] Variables between Node.js Server and Client

查看:133
本文介绍了Node.js服务器和客户端之间的变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Node.js运行一个简单的http服务器:

I run a simple http server with Node.js:

var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');
var sensor = require('ds18x20');
var temp = sensor.get('sensorID');

http.createServer(function(req,res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.end(index);
}).listen(80);

console.log(temp);

我的index.html文件:

my index.html file:

<html>
   <head>
   </head>
<body>
My temperature:
//space for variable: temp
</body>
</html>

现在,我想在index.html文件中打印服务器端变量:temp。但是我不知道该怎么做。

Now, I want to print the server-side variable: temp in my index.html file. But I have no idea how to do it.

也许有人可以帮我从服务器到客户端交换变量。

Maybe somebody can help me with the exchange of Variables from the server to the client.

推荐答案

正如你可以在@WebServer的回答中看到的那样,节点中有各种各样的模板引擎。
我想给您使用其中一个示例 - EJS

As you can read in @WebServer's answer there is a variety of template engines in node.
I want to give you an example of using one of them - EJS:

首次安装它:

npm install ejs

server.js:

server.js:

var http = require('http');
var ejs = require('ejs');
var fs = require('fs');

http.createServer(function(req,res) {
  res.writeHead(200, {'Content-Type': 'text/html'});

  //since we are in a request handler function
  //we're using readFile instead of readFileSync
  fs.readFile('index.html', 'utf-8', function(err, content) {
    if (err) {
      res.end('error occurred');
      return;
    }
    var temp = 'some temp';  //here you assign temp variable with needed value

    var renderedHtml = ejs.render(content, {temp: temp});  //get redered HTML code
    res.end(renderedHtml);
  });
}).listen(80);

您的视图可能如下所示:

Your view might look like this:

<html>
   <head>
   </head>
<body>
My temperature: <%= temp %>
</body>
</html>

EJS也逃脱 temp (和其他变量)你传递给视图),所以你不必担心XSS攻击。

EJS also escapes temp (and other variables you pass to the view) for you, so you don't have to worry about XSS attacks.

编辑

如果您不想在每个请求中读取文件,也可以编译模板:

You can also compile the template if you don't want to read the file on each request:

var http = require('http');
var ejs = require('ejs');
var fs = require('fs');

//we are not in a request handler so we may use readFileSync
var content = fs.readFileSync('index.html', 'utf-8');
var compiled = ejs.compile(content);

http.createServer(function(req,res) {
    var temp = 'some temp';

    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(compiled({temp: temp}));
}).listen(80);

编辑2(回答您的评论问题)

以下是使用Express和AJAX的简单示例:

Here is a simple example of using Express and AJAX:

server.js:

var http = require('http');
var express = require('express');
var app = express();

app.configure(function() {
    app.set('view engine', 'ejs');  //tell Express we're using EJS
    app.set('views', __dirname + '/views');  //set path to *.ejs files
    app.use(app.router);
    //put your static files (js, css, images) into /public directory
    app.use('/public', express.static(__dirname + '/public'));
});

//get some server data for sending it to the client
var getData = function() {
    return Math.random().toString();
}

app.get('/', function(req, res) {
    //render index.ejs file
    res.render('index', {val: getData()});
});

app.get('/ajax', function(req, res) {
    res.send(getData());
});

http.createServer(app).listen(80);

views / index.ejs:

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="/public/js/request.js"></script>
</head>
<body>

    <h1>Val: <span id="val"><%=val%></span></h1>

    <button id="loadRequest">Refresh</button>

</body>
</html>

public / js / request.js:

$(function() {
    $('#loadRequest').click(function() {
        $.get('/ajax', function(res) {
            $('#val').text(res);
        });
    });
});

希望这会有所帮助

这篇关于Node.js服务器和客户端之间的变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆