node.js - Sharepoint请求摘要值跨域

标签 node.js sharepoint sharepoint-2010 sharepoint-2013

我正在 NodeJS 和 ExpressJs 上构建一个 Web 应用程序,我试图通过 Sharepoint REST Api 将文档上传到 Sharepoint Online 库。

我能够验证、创建和更新列表项。我使用 node-sp-auth 进行身份验证,并使用 express-request 发出 http 请求。

为了访问 Sharepoint REST api,我在 header 中使用 FormDigestValue

标题:

Headers['Content-Type'] = 'application/json;odata=verbose';
Headers['X-RequestDigest'] = FormDigestValue;
Headers['Accept'] = "application/json;odata=verbose";
Headers['X-HTTP-Method'] = "POST";

当我尝试在自定义列表中创建/更新列表项时,这工作正常。但是当我尝试上传文档时,我收到以下错误:

body: '{"error":{"code":"-1, Microsoft.SharePoint.SPException","message":
{"lang":"en-US","value":"There is no app context to execute this request."}}}' } }

我用于上传的网址:

siteurl + "/_api/SP.AppContextSite(@TargetSite)/web/lists/getByTitle(@TargetLibrary)/RootFolder/Files/add(url=@TargetFileName,overwrite='true')?" +
        "@TargetSite='" + siteurl + "'" +
        "&@TargetLibrary='" + libraryName + "'" +
        "&@TargetFileName='" + fileName + "'";

帖子请求:

request.post({
    url: url,
    type: "POST",
    headers: uploadHeaders,
    binaryStringRequestBody: true,
    body: fileData,
})

知道我做错了什么吗?

最佳答案

使用此格式来代替帖子:

url: url,
type: 'POST',
data: fileData,
processData: false,
headers: { 
    'Accept':'application/json;odata=verbose',
    'X-RequestDigest': digest,
    'Content-Length': fileData.byteLength 
}

如果您还没有 RequestDigest,请调用 _api/SP.AppContextSite(@TargetSite)/contextinfo

关于node.js - Sharepoint请求摘要值跨域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43248324/

相关文章:

javascript - 在nodejs中使用Q.js Promise进行循环的正确方法

node.js - Bcrypt CompareSync 始终返回 False

visual-studio-2010 - Visual Studio 中 Sharepoint 文件的版本历史

python - 使用 Python 获取 SharePoint 列表

c# - SharePoint 2010 - 使用 SOAP 网络服务

sharepoint - 如何在不安装 sharepoint 的情况下使用 Sharepoint cmdlet?

node.js - nodejs中的Valums文件上传 - 多文件上传

javascript - 服务器到服务器 Socket IO 消息传递

Sharepoint 2013 和 Oauth 2.0

html - 如何使 Sharepoint 2010 Foundation 全局导航字体更大(自定义外观)