当前位置: 首页 > 面试题库 >

Node.js服务器和客户端之间的变量

符棋
2023-03-14
问题内容

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

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文件:

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

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

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


问题答案:

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

首先安装它:

npm install ejs

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);

您的视图可能如下所示:

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

EJS还会temp为您转义(以及传递给视图的其他变量),因此您不必担心XSS攻击。

编辑

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

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的简单示例:

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);
        });
    });
});

希望这可以帮助



 类似资料:
  • 问题内容: 简而言之,我有一个独立的ES主实例和一个在我的Java应用程序中创建的客户端节点。如果在客户端节点之前启动了独立ES实例,则客户端节点会正确发现独立ES实例。 我面临的问题是-如果由于某种原因,客户端节点在独立ES实例之前启动,我会看到“ MasterNotDiscoveredException”,这也是可预期的。但是,即使启动独立的ES实例后,我仍然会看到相同的异常。我应该更改一些配

  • 问题内容: 我有一个socket.io服务器正在运行,并且有一个带有socket.io.js客户端的匹配网页。一切正常。 但是,我想知道是否有可能在另一台机器上运行一个单独的node.js应用程序,该应用程序充当客户端并连接到上述的socket.io服务器? 问题答案: 使用Socket.IO-client应该可以做到这一点:https : //github.com/LearnBoost/sock

  • 我有一个java服务器应用程序,可以通过与多个客户端通信。在这个通道上,客户端发送请求,服务器发送应答。现在我想添加一个功能,服务器可以将文件发送到客户端。我不想通过用于通信的套接字发送,所以在一个客户端和一个服务器之间使用更多套接字是个好主意吗?如果是,如何处理?我用过这样的东西吗? 还是有更好的办法?

  • 我必须用JS制作一个应用程序,用AES编码一条消息,并通过AJAX将其传递给服务器。然后,服务器会启动并使用Java对消息进行解码。 我的问题是:如何在JS中加密消息,并使用AES在Java中解密它?知道java和js之间的通信已经通过Web服务建立 客户端,我使用Crypto JS库(http://code.google.com/p/crypto-js/)。服务器端我使用Java提供的Ciphe

  • 编辑:最后,问题似乎来自io.emit()中缺少第二个参数。现在它起作用了,非常感谢:)

  • 问题内容: 我应该为“ .thrift”文件定义哪种服务,以便以后将其用于我的程序? 此文件传输应该在客户端和服务器之间,并且应该是“部分”。 StreamFileService.thrift: StreamFileClient.java: } StreamFileServer.java: } StreamFileServiceImpl: } 问题答案: 您的代码对我来说似乎还不错(未经测试),没