繁体   English   中英

您如何在客户端使用Node.js变量?

[英]How do you use a Node.js variable on the client-side?

我是NODEJS的新手,我在为一个基本问题而苦苦挣扎,这是正确使用全局变量的方法,虽然我读了很多,但似乎无法使其正常工作,我将发布一些代码以更好地了解问题。

我有这个简单的js作为服务器运行:

myapi.js

var http = require('http');
var express = require('express');
var app = express();
var exec = require('child_process').exec, child;
var fs = require('fs');
var jUptime;
var ipExp = require('./getDown');
var filesD = [];
var path = "/media/pi/01D16F03D7563070/movies";

app.use(express['static'](__dirname ));

exec("sudo /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}'", function(error, stdout, stderr){
            ip = stdout;
            exports.ipAdd = ip;
            console.log(ip);
});

app.get('/files', function(req, res) {
    fs.readdir(path, function(err, files) {
        if (err){
            console.log("Non riesco a leggere i files");
        }

        filesD=files;
        console.log(filesD);

    });
    res.status(200).send(filesD);
});

app.get('/up', function(req, res) {
    child = exec("uptime -p", function(error, stdout, stderr){
                    jUptime = [{uptime: stdout}];
                });
    res.status(200).send(jUptime);
});

app.get('*', function(req, res) {
    res.status(404).send('Richiesta non riconosciuta');
});

app.use(function(err, req, res, next) {
    if (req.xhr) {
        res.status(500).send('Qualcosa è andato storto');
    } else {
        next(err);
    }
});
app.listen(3000);
console.log('Server attivo sulla porta 3000');

然后,我在一个简单的网页中使用了此JS:

getDown.js

var ip = require('./myapi').ipAdd;
function gDownloads() {
    var url;
    var jqxhr;
    var dat;

        url = 'http://' + ip + '/files';
        jqxhr = $.getJSON(url, function(dat) {
        for(i=0; i<dat.length; i++){
                    $('#downLoad').append('<p>' + dat[i] + '</p>');
        }
        $('#bId').append(dat.length);
        })
     .done(function() {
        console.log("OK");
     })
     .fail(function(data) {
        console.log("Fallito: "+data);
     })
};

问题是,当我导航到使用getDown.js的html页面时,在getDown.js上收到以下错误

require is not defined

我需要在myapi.js中传递包含IP地址的变量,以便在getDown.js中使用它,我希望我对自己的解释足够好,谢谢。

require是Node.js代码中存在的全局变量,即在服务器中执行的javascript代码中。

您的服务器将响应客户端并为其提供HTML页面以进行呈现。 该HTML页面可以告诉浏览器也从服务器请求javascript文件。 当它收到该文件时,客户端将执行它。 客户没有 require全局(您可以通过打开控制台,然后输入测试require

使用Browserify

或者,您可以编写Node样式的代码,就像您所做的那样需要全局变量 ,然后通过browserify运行代码。 这将创建一个可以由客户端执行的新javascript包,因此您应该告诉html页面使用该包而不是getDown.js

这是使用Browserify这样的基本示例。

module.js

function getIp() {
  return 123456;
}

module.exports = {
  getIp: getIp
};

main.js

var module = require('./module');

function getIp() {
  var ip = module.getIp();
  return ip;
};

console.log(getIp());

编译包

$ browserify main.js -o public/bundle.js

的index.html

<script type="text/javascript" src="public/bundle.js"></script>

客户端上的全局变量

要在服务器上已知的客户端上使用全局变量,可以将该变量传递到渲染引擎(如果使用Express,则可以是Jade),并将其插值到定义某些全局变量的<script>标记中。 。 如果这是您喜欢的方法,请发表评论,我可以添加更多详细信息。

如果您还有其他问题,请告诉我!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM