如何在全局范围的nodejs中定义const?
我想分开我的应用程序的部分有像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
或我需要将它们作为variables?
我想,你需要用常量创build文件,并在开始其他模块时将其用作需求文件。
文件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;
所以所有的全局variables将在一个地方
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'); }); }
Object.defineProperty(global, 'MY_CONST', { value : 123 })
PS请不要这样做
这个方法和@ user3040347build议的方法是一样的,但是有一点不同。
在这里,你需要用常量创build文件,并在你想要使用的模块的开头使用他作为require文件。
文件consts.js
CONST_1 = 42, CONST_2 = 123; module.exports = {};
在需要的模块中:
var consts = require('path_to_consts.js'); var my_var = CONST_1 + CONST_2; //Here you can access directly