Javascript 在node.js应用程序中包含外部.js文件
我有一个app.js节点应用程序。随着这个文件开始增长,我想将部分代码移动到一些其他文件中,这些文件是我在app.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
// 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中默认的严格模式下不起作用