Tag: 环境variables

在node.js中共享对象并避免全局性

在我的路由器/控制器中,在下面的片段( dbvariables)中共享数据库连接的最合适的方式是什么,而不将dbvariables转换为全局variables? var mongo = require('mongoskin'), db = mongo.db(config.db.adress); app.use(function(req, res, next) { db.open(function(err, data) { (err) ? res.send('Internal server error', 500) : next(); }); }); // Setting up controllers here app.post('/users', require('./controllers/users').create); 来自PHP的背景,我来思考dependency injection ,但我不知道如果这是适当的节点。

如何将variables传递到NodeJS模块?

在我的一个JS文件中包含另一个。 如何在包含的模块中设置variables? 我认为做这样的事情会起作用 var mymodule = require('mymodule.js'); mymodule.myvariable = 'test'; 然后在mymodule this.myvariable === 'test'; 但是这不起作用,它是undefined 。 将值传递给模块的各种选项有哪些? 我可以将variables作为参数添加到myModule中调用的每个函数中,但这并不理想。 有没有办法做到这一点没有全局variables,所以我可以在各种所需的模块独立设置variables,像这样? var mymodule1 = require('mymodule.js'); var mymodule2 = require('mymodule.js'); mymodule1.myvariable = 'test1'; mymodule2.myvariable = 'test2';

Node Express MongoDB本地驱动程序 – 在哪里打开数据库连接?

我想在app.js文件中通过Node-Mongo-Native-Driver打开并初始化数据库,然后将其保持打开并读取路由。 我把下面的代码放在app.js文件中,并打包app.gets,以便在打开数据库时使它们可用: var mongoClient = new MongoClient(new Server('localhost', 27017)); mongoClient.open(function(err, mongoClient) { var db1 = mongoClient.db("dev-db") , products = db1.collection('products'); app.get('/', routes.index); app.get('/users', user.list); }); 当我尝试读取我得到的index.js路由中的数据库时 ReferenceError: products is not defined 我认为index.js应该能够访问产品,因为它是在外部函数中定义的,因为在初始化中包装了app.gets。 除了第二个问题:MongoClient.open和MongoClient.connect有什么区别?

node.js传递variables

我正在寻找一些经验丰富的node.js程序员的方向。 我遇到的最大问题是将variables传递到单独的模块中。 例如在我的server.js我有以下几点: var db = mongoose.createConnection('localhost','test'); 现在我没有在server.js文件里面运行我的路由,他们被分成了自己的文件。 所以对于一个博客的例子可能是这样的: app.get('/blog/post/:id',function(req,res){ //do something here } 现在就是问题出现的地方。我不想在每个路由中设置数据库连接,更不用说我会认为这会造成大量的连接。 我该如何处理这个问题,是否有一个样例“真实世界”应用程序在那里,因为我似乎无法find任何关于这一点,我知道人们之前必须有这个问题。 我知道节点caching模块,但我不能想象它会caching连接,因为它是在自己的模块。 我创build了一个只保存站点configuration的configuration模块,因此需要这个我需要的地方不是问题。 我想还有其他的事情,我想要做到这一点,所以最好现在就明白这一点。 任何帮助表示赞赏。

Javascript中的ENVvariables等价

在你之前,我已经完成了我的研究( Javascript ENVvariables )。 我知道使用Javascript访问系统环境variables是不可能的。 我正在使用Yeoman来开发一个Javascript库。 该库适用于Google Maps API,我的一些testing要求将Google Maps API作为依赖项。 要加载Google Maps API脚本,您需要一个API密钥。 现在,我的代码位于我的Github,我真的不希望有我的API密钥作为代码的一部分。 在运行Grunt时,是否有任何Node模块能够将环境variables注入到我的testing中? Node.js中是否有任何ENVvariables等价物? 这是一个需要JS ENVvariables解决scheme的例子。 还有其他方法可以解决这个问题,但是我特别寻找这种types的解决scheme 。 编辑:最重要的是,当我使用grunt运行testing时,如何将这些ENVvariables自动加载到我的程序中 谢谢!

如何使用travis-ci的.travis.yml为Node.js应用程序提供环境参数?

我使用travis-ci来testing我的node.js应用程序。 因为应用程序需要使用Access Key和Secret Key进行login才能testing,所以我需要在travis-ci的.travis.yml文件中指定这两个键。 那么我该怎么做呢? 以及如何在Node中获取这些环境参数? 像这两个参数一样: https : //github.com/ikbear/nodejs-sdk/blob/feature/copy_and_move_file/test/rs.test.js#L22 我想要像这样在.travis.yml中指定它们: language: node_js node_js: – 0.8 – 0.6 – 0.4 env: – QINIU_ACCESS_KEY = '2FRuiVGEsA511NS9pNd2uvuSB3k5ozXE_DHCH8Ov' QINIU_SECRET_KEY = 'CIRtcmymB3VeIfXebFvYxmMmH9u2oLKW6rffVvoK' 那么我怎么能从我的这个testing文件中得到QINIU_ACCESS_KEY和QINIU_SECRET_KEY? https://github.com/ikbear/nodejs-sdk/blob/feature/copy_and_move_file/test/rs.test.js

“无法findPython可执行文件…” – npm安装挂起

我正在使用“npm install”来下载和编译我写的一个小型node.js应用程序的所有依赖项。 我使用的“package.json”文件是正确的,并包含所有需要的信息。 其中一个要安装的软件包具有“node-gyp”作为依赖项,所以我以前安装了“python2”软件包。 现在,在某个时候,我开始收到错误消息: > node-gyp rebuild gyp ERR! configure error gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable. gyp ERR! stack at failNoPython (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:103:14) gyp ERR! stack at /usr/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:42:11 gyp ERR! stack at F (/usr/lib/node_modules/npm/node_modules/which/which.js:40:25) gyp ERR! stack at E (/usr/lib/node_modules/npm/node_modules/which/which.js:43:29) gyp ERR! stack at […]

在请求之外检索本地和heroku应用程序主机名

我必须在我的应用程序中configuration一个模块,并根据主机名给它一个特定的URL。 就像http://localhost local和http://myapp.herokuapp.com 。 我知道我可以根据NODE_ENV硬编码值,或者甚至将其作为环境值存储并使用process.env.CUSTOMVAR_HOSTNAME 。 但不知何故,它感觉不对,因为myapp已经在Herokupipe理面板中configuration。 而且我不能使用request.headers.host因为模块configuration在应用程序开始时发生,在任何请求可以被处理之前。 有没有办法从代码中检索Heroku应用程序名称? 还是从一个环境variables? 我希望我的代码保持不变,无论我是在本地还是在Heroku(或其他任何地方)执行代码。

使用内存作为数据源进行环回testing

我正在尝试使用内存连接器作为数据源进行集成testing时。 但它似乎总是连接到mongodb数据源。 我做的一个主要的黑客攻击是将每个模型的数据源更改为内存。 但是一定有更好的方法来做到这一点。 我从一个吞咽任务运行我的testing。 我的roflmao模型 – 内存黑客: var models = require('../server/model-config.json'); for (var key in models) { var model = loopback.getModel(key); loopback.configureModel(model, {dataSource: memory}); } } 有没有办法改变应用程序的数据源? 或者我必须改变每个模型的数据源..? 一个这样做的方法是在testing期间改变环境variables,但到目前为止,没有运气..我正在做这个与吞吐任务预处理。 希望通过改变环境variables,它会使用datasources.integrationtesting.js,其中我有内存作为一个数据源。 我的一口气任务: return gulp.src('integration-tests/*.js') .pipe($.preprocess({context: {NODE_ENV: 'integrationtesting'}})) .pipe($.mocha()) 我在用着: 环回testingfunction 一饮而尽,摩卡 欣赏任何评论..)

如何通过sudo在生产模式下运行node.js Express?

我正在使用节点版本为.0.6.5的npm包express版本2.5.2。 我似乎在Debian 4.4.5上运行bash版本4.1.5。 我试图在生产模式下运行我的服务器,但它仍然在开发模式下运行。 我在我的bash shell中运行这些命令: $ export NODE_ENV=production $ echo $NODE_ENV production $ sudo echo $NODE_ENV production $ sudo node bootstrap.js 我在bootstrap.js里有这个代码: var bootstrap_app = module.exports = express.createServer(); //… console.log(bootstrap_app.settings.env); 这里是我看到打印标准: development 这是我的用法,或我的系统的问题? 编辑:感谢ThiefMaster他正确地确定这个问题源于我的运行节点作为根。 ThiefMasterbuild议使用iptables从端口80转发到非特权端口,但是我的系统给了我一个错误。 将此讨论移到superuser.com或serverfault.com(请点击链接)