CNode

如何在动态包含的脚本中 引用主文件中的上正文

问答
Yyakczh发布于11 年前最后回复11 年前6 回复4276 浏览0 收藏

比如 主文件是app.js

var http = require('http');
var url = require("url");
http.createServer(function (req, res) {
	var parsedUrl = url.parse(req.url, true); // true to get query as object
    var queryAsObject = parsedUrl.query;


	if (queryAsObject['file']){
      var file= './'+queryAsObject['file']+".js";
      require(file);
	}

  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

test.js 是动态引入的文件

console.log('this is test');
console.log( parsedUrl);

通过http://127.0.0.1:1337/?file=test 这样动态引入

如何才能在test.js中访问到 主文件app.js中的变量呢? 或者传一个Conntext变量 把需要的变量打包到里面整体传递给test.js

查看回复

回复 (6)

L
leapon#1·11 年前

可以把 test.js 写成一个函数,这样 require 进来的是一个函数。主文件的变量可以这个函数的参数传进去。

Y
yakczh#2·11 年前
引用 leapon可以把 test.js 写成一个函数,这样 require 进来的是一个函数。主文件的变量可以这个函数的参数传进去。

@leapon   

var file= './'+queryAsObject['file']+".js";
      require(file);

这一行怎么把函数参数传进去?

L
leapon#3·11 年前
引用 yakczh@leapon 这一行怎么把函数参数传进去?

@yakczh

假设myfile.js 里是一个函数 myfunction(setting)

var setting = { name:'app' }; 
var myfunction = require('myfile.js');
myfunction(setting);
L
leapon#4·11 年前

简化点,还可以:

var mystuff = require('myfile.js')(setting);
N
netwjx#5·11 年前

你需要使用nodejs的vm模块 https://nodejs.org/api/vm.html#vm_vm_runinthiscontext_code_options

var localVar = 'initial value';

var vmResult = vm.runInThisContext('localVar = "vm";');
console.log('vmResult: ', vmResult);
console.log('localVar: ', localVar);

var evalResult = eval('localVar = "eval";');
console.log('evalResult: ', evalResult);
console.log('localVar: ', localVar);

// vmResult: 'vm', localVar: 'initial value'
// evalResult: 'eval', localVar: 'eval'

如果要用于生产环境 最好考虑下安全性之类的 一般不会真的在当前上下文运行外部代码

M
MiguelValentine#6·11 年前

req.parserurl = parserurl REQ和RES的维持与特性最适合做此类传递

参与回复
登录后即可参与回复。登录