我正在为我的应用创建一个API,从我的amazon数据库中获取一些数据。 我已将环境变量添加到服务器上profile.d中的custom.sh文件中。奇怪的是,我可以从我的api中打印出这些变量,但是创建连接时唯一有效的变量就是用户变量。
当我在连接字符串中对数据库凭据进行硬编码时,它可以正常工作。
这是我的custom.sh,其中我声明了环境变量
#custom environment variables, with the actual values removed
export DB_HOST=value1;
export DB_PASS=value2;
export DB_USER=value3;
export DB_NAME=value4;
这是我的nodejs expressjs api文件
var express = require('express');
var app = express();
var mysql = require('mysql');
var DB_HOST = formatEnvironmentVariable(process.env.DB_HOST);
var DB_USER = formatEnvironmentVariable(process.env.DB_USER);
var DB_PASS = formatEnvironmentVariable(process.env.DB_PASS);
var DB_NAME = "'"+process.env.DB_NAME+"'";
function formatEnvironmentVariable(env) {
env = "'"+env+"'";
return env
}
var pool = mysql.createPool({
host : DB_HOST,
user : DB_USER,
password : DB_PASS,
database : DB_NAME,
connectionLimit: 100,
debug: false
})
function QueryTheDatabase(req, res, querystring) {
pool.getConnection(function(err,connection){
if (err) {
connection.release();
res.json({"code" : 100, "status" : "Error in connection database"});
return;
}
console.log('connected as id ' + connection.threadId);
connection.query(querystring,function(err,rows){
connection.release();
console.log("error? "+err);
if(!err) {
res.json(rows);
}
});
connection.on('error', function(err) {
console.log("error");
res.json({"code" : 100, "status" : "Error in connection database"});
return;
});
});
}
app.get('theurl', function(req, res) {
QueryTheDatabase(req, res, "the query that works fine");
});
var server = app.listen(3000, function () {
var host = server.address().address;
var host = server.address().port;
});
答案 0 :(得分:0)
我不确定为什么只有DB_USER变量设置正确(可能是某些其他进程正在发送该信息)。如果您正在运行shell脚本:
$ ./custom.sh
它不会起作用。它本质上是创建一个子shell,导出的变量是该shell的本地变量(它们不会影响父级)
使节点进程可以访问环境变量的唯一方法是首先获取文件。
$ source ./custom.sh
答案 1 :(得分:0)
我终于开始工作,结果我不需要添加''我的格式化功能。
而不是
import java.util.concurrent.*;
public class URLConnectionReader {
public static void main(String... args) {
NewsTask task = new NewsTask();
ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
service.scheduleAtFixedRate(task, 0L, 20L, TimeUnit.SECONDS);
}
}
我写了
var DB_HOST = formatEnvironmentVariable(process.env.DB_HOST);
var DB_USER = formatEnvironmentVariable(process.env.DB_USER);
var DB_PASS = formatEnvironmentVariable(process.env.DB_PASS);
var DB_NAME = "'"+process.env.DB_NAME+"'";
答案 2 :(得分:0)