简体   繁体   English

jQuery POST请求后的空主体

[英]Empty body after a jQuery POST request

I need your help with a problem concerning the Forge Autodesk Viewer I'm developping, based on this tutorial . 根据本教程 ,我需要有关我正在开发的Forge Autodesk Viewer的问题的帮助。 The viewer includes a feature to create buckets, and this feature is not working on my version of the viewer because the POST request to create the bucket contains no body. 查看器包含用于创建存储桶的功能,并且该功能不适用于我的查看器版本,因为用于创建存储桶的POST请求不包含任何正文。

The bucket creation feature is fully functionnal on the tutorial viewer, and I based my code on this one. 存储桶创建功能在教程查看器中完全可用,我的代码基于此。 I'm pretty new at this, so if I miss some essential parts, I'll provide them as soon as possible ! 我对此很陌生,因此,如果我错过了一些必要的部分,我会尽快提供!

The bucket creation code, client-side : 桶创建代码,客户端:

  function createNewBucket() {
    var bucketKey = $('#newBucketKey').val();
    var policyKey = $('#newBucketPolicyKey').val();
    console.log(bucketKey)
    jQuery.post({
      url: '/api/forge/oss/buckets',
      contentType: 'application/json',
      data: JSON.stringify({ 'bucketKey': bucketKey, 'policyKey': policyKey }),
      success: function (res) {
        $('#appBuckets').jstree(true).refresh();
        $('#createBucketModal').modal('toggle');
      },
      error: function (err) {
        if (err.status == 409)
          alert('Bucket already exists - 409: Duplicated')
        console.log(err);
      }
    });
  }

The bucket-creation code, server-side : 桶创建代码,服务器端:

// POST /api/forge/oss/buckets - creates a new bucket.
// Request body must be a valid JSON in the form of { "bucketKey": "<new_bucket_name>" }.
router.post('/buckets', async (req, res, next) => {
    let payload = new PostBucketsPayload();
    console.log(req)
    payload.bucketKey = config.credentials.client_id.toLowerCase() + '-' + req.body.bucketKey;
    payload.policyKey = 'transient'; // expires in 24h
    try {
        // Create a bucket using [BucketsApi](https://github.com/Autodesk-Forge/forge-api-nodejs-client/blob/master/docs/BucketsApi.md#createBucket).
        await new BucketsApi().createBucket(payload, {}, req.oauth_client, req.oauth_token);
        res.status(200).end();
    } catch(err) {
        next(err);
    }
});

The expected request (as displayed on VSCode, from the working code) : 预期的请求(如VSCode所示,来自工作代码):

IncomingMessage {_readableState: ReadableState, readable: false, _events: Object, _eventsCount: 1, _maxListeners: undefined, …}
oss.js:60
_body:true
_consuming:true
_dumped:false
_events:Object {end: }
_eventsCount:1
_maxListeners:undefined
_parsedUrl:Url {protocol: null, slashes: null, auth: null, …}
_readableState:ReadableState {objectMode: false, highWaterMark: 16384, buffer: BufferList, …}
[[StableObjectId]]:1
aborted:false
baseUrl:"/api/forge/oss"
body:Object {bucketKey: "buckettest"}
client:Socket {connecting: false, _hadError: false, _handle: null, …}
complete:true
connection:Socket {connecting: false, _hadError: false, _handle: null, …}
destroyed:false
fresh:false
headers:Object {host: "localhost:3001", user-agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0)…", accept: "*/*", …}
host:"localhost"
hostname:"localhost"
httpVersion:"1.1"
httpVersionMajor:1
httpVersionMinor:1
ip:undefined
ips:Array(0)
length:undefined
method:"POST"
next:function next(err) { … }
oauth_client:OAuth2TwoLegged {authentication: Object, authName: "oauth2_application", clientId: "rt2DhnuChgIIEX3GhnGyeISPS9Vzoh3p", …}
oauth_token:Object {access_token: "eyJhbGciOiJIUzI1NiIsImtpZCI6Imp3dF9zeW1tZXRyaWNfa2…", token_type: "Bearer", expires_in: 3599, …}
originalUrl:"/api/forge/oss/buckets"
params:Object {}
path:"/buckets"
protocol:"http"
query:Object {}
rawHeaders:Array(22) ["Host", "localhost:3001", "User-Agent", …]
rawTrailers:Array(0) []
readable:false
readableBuffer:BufferList
readableFlowing:true
readableHighWaterMark:16384
readableLength:0
res:ServerResponse {_events: Object, _eventsCount: 1, _maxListeners: undefined, …}
route:Route {path: "/buckets", stack: Array(1), methods: Object}
secure:false
socket:Socket {connecting: false, _hadError: false, _handle: null, …}
stale:true
statusCode:null
statusMessage:null
subdomains:Array(0)
[[StableObjectId]]:2
length:0
__proto__:Array(0) [, …]
trailers:Object {}
upgrade:false
url:"/buckets"
xhr:true
__proto__:IncomingMessage {app: }

The actual request (as displayed on VSCode, from the non-working code) : 实际的请求(如非工作代码显示在VSCode上):

IncomingMessage {_readableState: ReadableState, readable: true, _events: Object, _eventsCount: 1, _maxListeners: undefined, …}
oss.js:61
_consuming:false
_dumped:false
_events:Object {end: }
_eventsCount:1
_maxListeners:undefined
_parsedUrl:Url {protocol: null, slashes: null, auth: null, …}
_readableState:ReadableState {objectMode: false, highWaterMark: 16384, buffer: BufferList, …}
[[StableObjectId]]:1
aborted:false
baseUrl:"/api/forge/oss"
client:Socket {connecting: false, _hadError: false, _handle: TCP, …}
complete:true
connection:Socket {connecting: false, _hadError: false, _handle: TCP, …}
destroyed:false
fresh:false
headers:Object {host: "localhost:3000", user-agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0)…", accept: "*/*", …}
host:"localhost"
hostname:"localhost"
httpVersion:"1.1"
httpVersionMajor:1
httpVersionMinor:1
ip:"::1"
ips:Array(0)
method:"POST"
next:function next(err) { … }
oauth_client:OAuth2TwoLegged {authentication: Object, authName: "oauth2_application", clientId: "rt2DhnuChgIIEX3GhnGyeISPS9Vzoh3p", …}
oauth_token:Object {access_token: "eyJhbGciOiJIUzI1NiIsImtpZCI6Imp3dF9zeW1tZXRyaWNfa2…", token_type: "Bearer", expires_in: 3599, …}
originalUrl:"/api/forge/oss/buckets"
params:Object {}
path:"/buckets"
protocol:"http"
query:Object {}
rawHeaders:Array(22) ["Host", "localhost:3000", "User-Agent", …]
rawTrailers:Array(0) []
readable:true
readableBuffer:BufferList
readableFlowing:null
readableHighWaterMark:16384
readableLength:27
res:ServerResponse {_events: Object, _eventsCount: 1, _maxListeners: undefined, …}
route:Route {path: "/buckets", stack: Array(1), methods: Object}
secure:false
socket:Socket {connecting: false, _hadError: false, _handle: TCP, …}
stale:true
statusCode:null
statusMessage:null
subdomains:Array(0)
trailers:Object {}
upgrade:false
url:"/buckets"
xhr:true
__proto__:IncomingMessage {app: }

The error message (as displayed on VSCode) : 错误消息(如VSCode所示):

(node:15636) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'bucketKey' of undefined
[...]
(node:15636) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
warning.js:18
(node:15636) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Since your request's readable property is true , it's possible that the express application hasn't parsed its body yet. 由于您请求的readable属性为true ,所以快速应用程序可能尚未解析其主体。 Make sure to setup the JSON parsing middleware as shown on this line in the tutorial. 确保按照本教程这一行所示设置JSON解析中间件。 With this middleware, your express app will automatically read the body of any incoming request with Content-Type: application/json . 使用此中间件,您的express应用程序将自动读取Content-Type: application/json的任何传入请求的Content-Type: application/json

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM