使用 Node js 的 azure-graphapi 模块更新用户
Updating user using azure-graphapi module for Node js
我正在尝试使用 Node.js 技术更新我的 Azure 帐户上的用户。我正在使用 azure-graphapi 模块发送请求和初始化。
以下是我的代码。
var GraphAPI = require('azure-graphapi');
var graph = new GraphAPI(appSettings.oauthOptions.tenantId, appSettings.oauthOptions.clientId, appSettings.oauthOptions.clientSecret);
var reqHeaders = { "content-type": "application/json" };
var reqBody = {
"department": "Sales",
"usageLocation": "US"
}
var person = {
userId: userID
};
graph.patch('users/f0eceb4f-xxxx-409a-xxxx-4e3exx4e3157', JSON.stringify(reqBody), reqHeaders, function (err, user) {
if (!err) {
console.log(user);
}
else {
console.log(err);
}
});
即使在提供了 content-Type header 之后,它仍然向我抛出错误“{ [Error: Graph API Error: 400 (Bad Request) Content-Type header value missing.] statusCode: 400 }”
如果有人能帮助我解决这个问题,那将是非常有帮助的。
您使用的这个模块有几个错误。为了使代码工作,我们应该在 node_modules/auzre-graphapi
:
中对源代码 GraphAPI.js
做一些额外的修改
从Line 195, there is an if
condition stmt, the author seems forget to define the content
which is used since line 199开始,仅当您必须将post body解析为buffer
object时,它才会设置content-type header。所以,我们可以快速修改代码为:
if (data) {
if (Buffer.isBuffer(data)) {
options.headers['Content-Type'] = contentType;
} else if (!contentType) {
content = data;
if (typeof content === 'string') {
options.headers['Content-Type'] = 'application/x-www-form-urlencoded';
options.headers['Content-Length'] = content.length;
} else if (content !== null && typeof content === 'object') {
content = JSON.stringify(content);
options.headers['Content-Type'] = 'application/json';
options.headers['Content-Length'] = content.length;
}
} else {
if (typeof contentType === 'string') {
options.headers['Content-Type'] = contentType;
} else if (contentType['Content-type'] !== null) {
options.headers['Content-Type'] = contentType['Content-type'];
}
}
}
然后将 header 设置为您的代码:var reqHeaders = { "Content-type": "application/json" };
顺便说一句,如 update user document 所指,如果成功,它将响应 204 而不响应 body,因此如果成功,您的代码将打印“未定义”。
2016 年 4 月 19 日更新
由于作者不再维护包,他创建了一个新包graph-service for universal Graph APIs. Refer to https://github.com/fhellwig/azure-graphapi/issues/5#issuecomment-211392546
我正在尝试使用 Node.js 技术更新我的 Azure 帐户上的用户。我正在使用 azure-graphapi 模块发送请求和初始化。 以下是我的代码。
var GraphAPI = require('azure-graphapi');
var graph = new GraphAPI(appSettings.oauthOptions.tenantId, appSettings.oauthOptions.clientId, appSettings.oauthOptions.clientSecret);
var reqHeaders = { "content-type": "application/json" };
var reqBody = {
"department": "Sales",
"usageLocation": "US"
}
var person = {
userId: userID
};
graph.patch('users/f0eceb4f-xxxx-409a-xxxx-4e3exx4e3157', JSON.stringify(reqBody), reqHeaders, function (err, user) {
if (!err) {
console.log(user);
}
else {
console.log(err);
}
});
即使在提供了 content-Type header 之后,它仍然向我抛出错误“{ [Error: Graph API Error: 400 (Bad Request) Content-Type header value missing.] statusCode: 400 }”
如果有人能帮助我解决这个问题,那将是非常有帮助的。
您使用的这个模块有几个错误。为了使代码工作,我们应该在 node_modules/auzre-graphapi
:
GraphAPI.js
做一些额外的修改
从Line 195, there is an if
condition stmt, the author seems forget to define the content
which is used since line 199开始,仅当您必须将post body解析为buffer
object时,它才会设置content-type header。所以,我们可以快速修改代码为:
if (data) {
if (Buffer.isBuffer(data)) {
options.headers['Content-Type'] = contentType;
} else if (!contentType) {
content = data;
if (typeof content === 'string') {
options.headers['Content-Type'] = 'application/x-www-form-urlencoded';
options.headers['Content-Length'] = content.length;
} else if (content !== null && typeof content === 'object') {
content = JSON.stringify(content);
options.headers['Content-Type'] = 'application/json';
options.headers['Content-Length'] = content.length;
}
} else {
if (typeof contentType === 'string') {
options.headers['Content-Type'] = contentType;
} else if (contentType['Content-type'] !== null) {
options.headers['Content-Type'] = contentType['Content-type'];
}
}
}
然后将 header 设置为您的代码:var reqHeaders = { "Content-type": "application/json" };
顺便说一句,如 update user document 所指,如果成功,它将响应 204 而不响应 body,因此如果成功,您的代码将打印“未定义”。
2016 年 4 月 19 日更新
由于作者不再维护包,他创建了一个新包graph-service for universal Graph APIs. Refer to https://github.com/fhellwig/azure-graphapi/issues/5#issuecomment-211392546