2016-06-25 3 views
0

Ich versuche eine Nodejs-Funktion auszuführen, die einen SAS-Token für IoT Hub erstellt. Doch bei dem Code ausgeführt wird, stürzt die Funktion mit folgenden Ausnahme:mscorlib: TypeError: f.apply ist keine Funktion

2016-06-23T19:01:24.415 Exception while executing function: Functions.getSASToken. mscorlib: TypeError: f.apply is not a function 
    at eval (eval at <anonymous> (C:\Program Files (x86)\SiteExtensions\Functions\0.2.10238\bin\edge\double_edge.js:34:28), <anonymous>:42:7). 

Die Funktion I ist ein SAS-Token-Generator von Microsoft veröffentlicht laufen versuchen, ich habe es nur bereinigt um Funktionen auszuführen:

var crypto = require('crypto'); 
var util = require('util'); 

var sbNamespace = process.env.SBNAMESPACE || 'xxx.azure-devices.net'; 

var generateSasToken = function(resourceUri, signingKey, policyName, expiresInMins) { 
    resourceUri = encodeURIComponent(resourceUri.toLowerCase()).toLowerCase(); 

    // Set expiration in seconds 
    var expires = (Date.now()/1000) + expiresInMins * 60; 
    expires = Math.ceil(expires); 
    var toSign = resourceUri + '\n' + expires; 

    // using crypto 
    var decodedPassword = new Buffer(signingKey, 'base64').toString('binary'); 
    const hmac = crypto.createHmac('sha256', decodedPassword); 
    hmac.update(toSign); 
    var base64signature = hmac.digest('base64'); 
    var base64UriEncoded = encodeURIComponent(base64signature); 

    // construct autorization string 
    var token = "SharedAccessSignature sr=" + resourceUri + "&sig=" 
    + base64UriEncoded + "&se=" + expires; 
    if (policyName) token += "&skn="+policyName; 
    // console.log("signature:" + token); 
    return token; 
}; 

module.exports.getSASToken = function getSASToken(context, req) { 
    var token = req.query.token; 
    var deviceId = req.query.deviceId; 
    var resourceUri = util.format('%s/devices/%s', sbNamespace, deviceId); 

    var sasToken = generateSasToken(resourceUri, token, null, 14400); 

    context.log(sasToken); 
    context.send(sasToken);  
} 

Antwort

3

Das Problem besteht darin, dass die Funktionen erwarten, dass Ihr Code eine einzelne unbenannte-Funktion exportiert. Also entfernen Sie den getSASToken Namen und Sie sollten gut sein. Das heißt, ändern:

module.exports.getSASToken = function getSASToken(context, req) { 
    ... 
} 

zu

module.exports = function getSASToken(context, req) { 
    ... 
}