我是否正确使用NodeJS中的请求模块?

时间:2018-02-22 04:46:32

标签: javascript node.js request

我需要发出类型" application / json"的POST请求。某个网址

这是请求格式

{
  "Subject": "TestSubject",
  "Body": "TestBody",
  "PreferredLanguage": "en-US",
  "Recipients": [
    {
      "FirstName": "TestName",
      "EmailAddress": "TestEmail"
    }
  ]
}

以下是我在使用请求模块的代码中执行此操作的方法,该模块当前不起作用。

request.post(
        'https://someURL.com/messages',
        {
            json:
            {
                Subject: "TestSubject",
                Body: "TestBody",
                PreferredLanguage: "en-US",
                Recipients: [
                    {
                        FirstName: "TestName",
                        EmailAddress: "TestEmail"
                    }
                ]
            }
        }
    )

我如何处理此请求有什么问题?

1 个答案:

答案 0 :(得分:0)

您的代码缺少回调

NSURL *audioURL = /*an audio URL*/
AVAudioFile *file = [[AVAudioFile alloc] initForReading:audioURL error:nil];
AVAudioPlayerNode *audioPlayer = [[AVAudioPlayerNode alloc] init];

_engine = [[AVAudioEngine alloc] init];

[_engine attachNode:audioPlayer];

AudioComponentDescription mixerDesc;
mixerDesc.componentType = kAudioUnitType_Mixer;
mixerDesc.componentSubType = kAudioUnitSubType_MatrixMixer;
mixerDesc.componentManufacturer = kAudioUnitManufacturer_Apple;
mixerDesc.componentFlags = kAudioComponentFlag_SandboxSafe;

[AVAudioUnit instantiateWithComponentDescription:mixerDesc options:kAudioComponentInstantiation_LoadInProcess completionHandler:^(__kindof AVAudioUnit * _Nullable mixerUnit, NSError * _Nullable error) {

    [_engine attachNode:mixerUnit];

    /*Give the mixer one input bus and one output bus*/
    UInt32 inBuses = 1;
    UInt32 outBuses = 1;
    AudioUnitSetProperty(mixerUnit.audioUnit, kAudioUnitProperty_ElementCount, kAudioUnitScope_Input, 0, &inBuses, sizeof(UInt32));
    AudioUnitSetProperty(mixerUnit.audioUnit, kAudioUnitProperty_ElementCount, kAudioUnitScope_Output, 0, &outBuses, sizeof(UInt32));

    /*Set the mixer's input format to have 2 channels*/
    UInt32 inputChannels = 2;
    AudioStreamBasicDescription mixerFormatIn;
    UInt32 size;
    AudioUnitGetProperty(mixerUnit.audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &mixerFormatIn, &size);
    mixerFormatIn.mChannelsPerFrame = inputChannels;
    AudioUnitSetProperty(mixerUnit.audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &mixerFormatIn, size);

    /*Set the mixer's output format to have 2 channels*/
    UInt32 outputChannels = 2;
    AudioStreamBasicDescription mixerFormatOut;
    AudioUnitGetProperty(mixerUnit.audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &mixerFormatOut, &size);
    mixerFormatOut.mChannelsPerFrame = outputChannels;

    AudioUnitSetProperty(mixerUnit.audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &mixerFormatOut, size);

    /*Connect the nodes*/
    [_engine connect:audioPlayer to:mixerUnit format:nil];
    [_engine connect:mixerUnit to:_engine.outputNode format:nil];

    /*Start the engine*/
    [_engine startAndReturnError:nil];

    /*Play the audio file*/
    [audioPlayer scheduleFile:file atTime:nil completionHandler:nil];
    [audioPlayer play];

    /*Set all matrix volumes to 1*/

    /*Set the master volume*/
    AudioUnitSetParameter(mixerUnit.audioUnit, kMatrixMixerParam_Volume, kAudioUnitScope_Global, 0xFFFFFFFF, 1.0, 0);

    for(UInt32 i = 0; i < inputChannels; i++) {

        /*Set input volumes*/
        AudioUnitSetParameter(mixerUnit.audioUnit, kMatrixMixerParam_Volume, kAudioUnitScope_Input, i, 1.0, 0);

        for(UInt32 j = 0; j < outputChannels; j++) {
            /*Set output volumes (only one outer iteration necessary)*/
            if(i == 0) {
                AudioUnitSetParameter(mixerUnit.audioUnit, kMatrixMixerParam_Volume, kAudioUnitScope_Output, j, 1.0, 0);
            }

            /*Set cross point volumes - 1.0 for corresponding
             inputs/outputs, otherwise 0.0*/
            UInt32 crossPoint = (i << 16) | (j & 0x0000FFFF);
            AudioUnitSetParameter(mixerUnit.audioUnit, kMatrixMixerParam_Volume, kAudioUnitScope_Global, crossPoint, (i == j) ? 1.0 : 0.0, 0);
        }

    }

    /*If you want to verify it's working, try something like this to silence only one channel of audio
    AudioUnitSetParameter(mixerUnit.audioUnit, kMatrixMixerParam_Volume, kAudioUnitScope_Output, 0, 0.0, 0);
    */
}];

如此处所述:Function.prototype.bind