我想将我的应用程序分离到部分以获得类似MVC的内容...目前我认为exports
工作以及如何在不同文件之间进行通信。我无法理解的一件事是如何在全局范围内使用常量?目前我有这样的事情:
// start.js
const ROOT_DIR = __dirname;
const APP_DIR = ROOT_DIR + '/app/';
const MODULES_DIR = '/usr/local/lib/node_modules/';
const APP_PORT = 4935;
var server = require(APP_DIR + 'server.js');
server.start();
// server.js
exports.start = function() {
var express = require(MODULES_DIR + 'express'),
app = express(),
http = require('http'),
server = http.createServer(app),
io = require(MODULES_DIR + 'socket.io').listen(server),
fs = require('fs'),
path = require('path');
server.listen(APP_PORT);
app.use(express.static(ROOT_DIR + '/assets'));
app.get('/', function (req, res) {
res.sendfile(ROOT_DIR + '/views/index.html');
});
}
是否可以自动将此常量分配给server.js
或者我需要将它们作为变量传递?
答案 0 :(得分:15)
我认为,您需要使用常量创建文件,并在开始其他模块时将其用作需要文件。
文件consts.js
exports.CONST_1 = 42,
exports.CONST_2 = 123;
在必要的模块中:
var consts = require('path_to_consts.js');
var my_var = consts.CONST_1 + consts.CONST_2;
所以所有全局变量都在一个地方
答案 1 :(得分:1)
Object.defineProperty(global, 'MY_CONST', { value : 123 })
P.S。请不要这样做
答案 2 :(得分:1)
这个方法与@ user3040347建议的方法相同,但差别不大。
在这里,您需要使用常量创建文件,并在要使用的模块的开头使用他作为require文件。
文件consts.js
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.0.1</version>
</dependency>
在必要的模块中:
CONST_1 = 42,
CONST_2 = 123;
module.exports = {};
答案 3 :(得分:0)
Javascript常量不能在Node.js中的文件中全局工作。您需要将它们传递给函数。
// start.js
const ROOT_DIR = __dirname;
const APP_DIR = ROOT_DIR + '/app/';
const MODULES_DIR = '/usr/local/lib/node_modules/';
const APP_PORT = 4935;
var server = require(APP_DIR + 'server.js');
server.start(MODULES_DIR,APP_PORT,ROOT_DIR);
// server.js
exports.start = function(MODULES_DIR,APP_PORT,ROOT_DIR) {
var express = require(MODULES_DIR + 'express'),
app = express(),
http = require('http'),
server = http.createServer(app),
io = require(MODULES_DIR + 'socket.io').listen(server),
fs = require('fs'),
path = require('path');
server.listen(APP_PORT);
app.use(express.static(ROOT_DIR + '/assets'));
app.get('/', function (req, res) {
res.sendfile(ROOT_DIR + '/views/index.html');
});
}