Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js应用程序中包含外部.js文件_Javascript_Node.js - Fatal编程技术网

Javascript 在node.js应用程序中包含外部.js文件

Javascript 在node.js应用程序中包含外部.js文件,javascript,node.js,Javascript,Node.js,我有一个app.js节点应用程序。随着这个文件开始增长,我想将部分代码移动到一些其他文件中,这些文件是我在app.js文件中“需要”或“包含”的 我正在尝试一些事情,比如: // Declare application var app = require('express').createServer(); // Declare usefull stuff for DB purposes var mongoose = require('mongoose'); var Schema = mong

我有一个app.js节点应用程序。随着这个文件开始增长,我想将部分代码移动到一些其他文件中,这些文件是我在app.js文件中“需要”或“包含”的

我正在尝试一些事情,比如:

// Declare application
var app = require('express').createServer();

// Declare usefull stuff for DB purposes
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

// THE FOLLOWING REQUIRE DOES NOT WORK
require('./models/car.js');
在car.js中:

// Define Car model
CarSchema = new Schema({
  brand        : String,
  type : String
});
mongoose.model('Car', CarSchema);
我得到了一个错误:

ReferenceError: Schema is not defined

我只是想加载car.js的内容(而不是将所有内容都放在同一个app.js文件中),node.js中是否有一种特殊的方法来实现这一点?

强调其他人一直在说的话,顶层的
var foo
不会创建全局变量。如果需要全局变量,请编写
global.foo
。但我们都知道地球人是邪恶的

如果你是在我参与的node.js项目中使用全局函数的人,我会将它们重构掉,因为这方面的用例太少了(有一些例外,但这不是一个例外)

in car.js

function make(Schema, mongoose) {
    // Define Car model
    CarSchema = new Schema({
      brand        : String,
      type : String
    });
    mongoose.model('Car', CarSchema);
}

module.exports.make = make;
你可以把

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

在car.js文件的顶部,让它工作,或者你可以按照Raynos说的做。

正确的答案通常是使用require,但在少数情况下是不可能的

下面的代码将实现这一技巧,但请谨慎使用:

var fs = require('fs');
var vm = require('vm');
var includeInThisContext = function(path) {
    var code = fs.readFileSync(path);
    vm.runInThisContext(code, path);
}.bind(this);
includeInThisContext(__dirname+"/models/car.js");

如果只想从命令行测试库,可以执行以下操作:

cat somelibrary.js mytestfile.js | node
简短答复:

// lib.js
module.exports.your_function = function () {
  // Something...
};

// app.js
require('./lib.js').your_function();

这种方法在Node.js中对我有效,这有什么问题吗

文件“include.js”:

fs = require('fs');
require('./include.js');

fs.readFile('./file.json', function (err, data) {
    if (err) {
        console.log('ERROR: file.json not found...')
    } else {
        contents = JSON.parse(data)
    };
})
文件“main.js”:

fs = require('fs');
require('./include.js');

fs.readFile('./file.json', function (err, data) {
    if (err) {
        console.log('ERROR: file.json not found...')
    } else {
        contents = JSON.parse(data)
    };
})

该范围中不存在架构。您可以尝试通过某种导出函数将Schema传递到car.js中,这样您就可以引用它。car.js.Node.js中的或require mongoose使用CommonJS,它将代码划分为不同的模块。根据经验法则,节点应用程序中的代码范围是在其中定义的文件。因此,您需要在car.js中使用mongoose,在car.js中,您需要导出应用程序其余部分所需的任何内容,然后像现在一样在主文件中使用mongoose。提示:阅读本文的任何人,您可以只执行exports.foo,而不必执行module.exports。foo@TylerEgeto如果我使用更长的版本,我总是感觉更安全;)请扩展示例,说明如何在主应用程序中使用car.js中定义的变量?e、 g.`函数make(…){…CarModel=mongoose.model('Car',CarSchema);}`在应用程序中,如何使用CarModel?:))好的,在函数中设置多个变量时如何?e、 g.多个型号,甚至3个型号,还有2个其他型号?它们是否应作为对象的一部分返回?e、 g.
return{models:{car:CarModel,dealer:CarDealer},carStuff:carStuff}
问题是:“运行的代码无法访问本地范围。”这是什么样的
#include
?这对我不起作用。我遇到错误
找不到模块lib.js
@Manoj您必须在lib.js前面加前缀。/like so:
require('./lib.js')。您的函数()这是错误的。“fs”永远不会导出!在ES6中默认的严格模式下不起作用