【发布时间】:2016-06-23 23:15:31
【问题描述】:
我对 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你的节点脚本,除非你使用类似browserify的东西 -
这里的基本误解:您的 NodeJS 代码正在在服务器上运行。您的网页代码正在在客户端上运行。你得到的错误(“require is not defined”)是因为
require不是浏览器当前提供的,除非你使用AMD插件,即使你不想包含你的客户端网页中的>服务器端代码。 -
@T.J.Crowder 这是有道理的,那么我怎样才能完成我想做的事情呢?我想进行 REST 调用并获取带有 IP 的 json,但我真的很想避免为此使用调用。
标签: javascript jquery node.js html