环境变量不接受天蓝色

时间:2018-03-06 07:22:57

标签: node.js azure environment-variables azure-storage azure-storage-blobs

我在终端中为azure定义了环境变量,如下所示,

SET AZURE_STORAGE_ACCOUNT=accountname
SET SAS_TOKEN="sr=c&sp=rwl&sig=signatureKey%3D&sv=2017-04-17&se=2018-03-10"

在定义了varibale之后,我在azure blob存储函数中调用了这些变量,如

AZURE_STORAGE_ACCOUNT= process.env.AZURE_STORAGE_ACCOUNT;
SAS_TOKEN = process.env.SAS_TOKEN;
var blobUri = "http://"+AZURE_STORAGE_ACCOUNT+".blob.core.windows.net";
var blobService = azureStorage.createBlobServiceWithSas(blobUri, SAS_TOKEN).withFilter(new azureStorage.ExponentialRetryPolicyFilter());
blobService.createBlockBlobFromLocalFile('mycontainer', 'sparks-events-data', fileToWrite, function(error, result, response) {
if (!error) {
    console.log("upload successful..");
} else {
    console.log(error);
}});

当我在上面运行文件时,我收到错误

  

StorageError:服务器无法验证请求。确保   正确形成Authorization标头的值,包括   签名。

但是当我直接在代码中调用SAS令牌时,它工作正常。我这样使用

var sasKey = "sr=c&sp=rwl&sig=signatureKey%3D&sv=2017-04-17&se=2018-03-10";
var blobService = azureStorage.createBlobServiceWithSas(blobUri, sasKey ).withFilter(new azureStorage.ExponentialRetryPolicyFilter());

它对我来说很好。我需要将SAS令牌设置为环境变量。这就是我所缺少的。请有人建议我解决这个问题。 在此先感谢,

1 个答案:

答案 0 :(得分:1)

1-1 1-2 2-1 2-2 ... 12-1 12-2 13-1 13-2 ... n-1 n-2 代替那些env vars。导出变量会导致变量被 shell中启动的后续进程继承。

export

在滚动自己的 env var secrets 处理逻辑之前,您可能需要查看此npm包。作为一个民族,我们已经解决了这个问题 https://github.com/motdotla/dotenv

在Windowsland中,只需使用export SAS_TOKEN="..." ,但请确保您的Node进程在同一个终端窗口中启动:

set

留意那些报价!