我有一点时间让这个简单的功能在移动服务中工作。我跟踪了Carlos Figuira关于在移动服务中使用扩展登录范围的优秀帖子,并创建了一个新的共享脚本,我的目的是获取当前登录的用户并从Google服务中检索他们的电子邮件地址。我首先查看Users表,看看它们是否有记录。如果没有,我会从Google API中获取信息,然后将信息存储在“用户”表中。最终,我的函数返回电子邮件地址。原因是我们使用他们用来登录Google的电子邮件地址将用户与记录相关联(我们知道他们的电子邮件地址,而不是时髦的Google ID)。
但是,我在调用共享脚本时收到错误。我甚至不确定脚本本身是否正确。我在我的git存储库的共享文件夹中创建了一个名为helpers.js的文件。这是共享脚本:
exports.getUserEmail = function (user) {
return 'test';
// The table object is the Users table for caching data.
var table = request.service.tables.getTable(‘Users’);
var cachedIdentities;
var email = '';
user.getIdentities({
success: function (identities) {
cachedIdentities = identities;
table.where({
userid: user.userid
}).read({
success: insertItemIfNotExists
});
function insertItemIfNotExists(existingItems) {
if (existingItems.length > 0) {
// Return the email address stored in the users table:
email = existingItems[0].email;
return email;
} else {
// Insert the user information into the Users table and return the email address:
var req = require('request');
if (cachedIdentities.google) {
var googleAccessToken = cachedIdentities.google.accessToken;
var url = 'https://www.googleapis.com/oauth2/v3/userinfo?access_token=' + googleAccessToken;
req(url, function (err, resp, body) {
if (err || resp.statusCode !== 200) {
console.error('Error sending data to Google API: ', err);
// TODO: send error feedback to calling script.
//request.respond(statusCodes.INTERNAL_SERVER_ERROR, body);
} else {
try {
var userData = JSON.parse(body);
var item = {
userid: user.userid,
username: userData.name,
email: userData.email
};
// Set the email return value.
email = item.email;
// Cache our user data.
table.insert(item, {
success: function () {
return email;
},
error: function (err) {
console.error('Error inserting user Google data into Users table: ', err);
return email;
}
});
} catch (ex) {
console.error('Error parsing response from Google API: ', ex);
// TODO: send error feedback to the calling script.
//request.respond(statusCodes.INTERNAL_SERVER_ERROR, ex);
}
}
});
} else {
// Return empty email.
console.log("Could not retrieve user information for '%d'", user.userid);
}
}
}
}
});
}
当我从另一个脚本(Section.insert.js)引用脚本时,我这样做:
var helpers = require('../ shared / helpers.js');
调用此方法时,出现以下错误:
脚本'/table/Section.insert.js'出错。 SyntaxError:意外的标记ILLEGAL [外部代码] at Object.exports.require(D:\ home \ site \ wwwroot \ App_Data \ config \ scripts \ table__fxutil.js:9:12) [外部代码] 在插入(:3:16) at:1:8
在我看来,这似乎是一个node.js错误,指出没有注册/安装helpers.js模块。
我错过了什么吗?我通过git存储库将helpers.js文件添加到Azure,我的所有更改都显示正常。
另外,关于我的helpers.js文件中的“getUserEmail”脚本,我是否正确地采用了这种方式?
谢谢!
答案 0 :(得分:0)
好的,我解决了这个问题。在我的共享脚本(getUserEmail)中,我以某种方式使用反引号(`)而不是单引号引用了Users表。如果存在任何格式错误的字符串,则结果错误是node.js倾向于抛出的错误。