Serverless: لا يمكن أن يكون لديك وظائف متعددة تستهدف نفس المسار بطرق مختلفة

تم إنشاؤها على ٢٠ أغسطس ٢٠١٦  ·  3تعليقات  ·  مصدر: serverless/serverless

إصدار إطار عمل بدون خادم:

1.0.0 بيتا 2

نظام التشغيل:

OSX 10.11.6

سلوك متوقع:

لديك التكوين التالي ، طريقة واحدة GET user/profile أخرى POST user/profile وتلقي خطأ عند النشر.

functions:
  getProfile:
    handler: handler.getProfile
    events:
      - http:
          path: user/profile
          method: get
  updateProfile:
    handler: handler.updateProfile
    events:
      - http:
          path: user/profile
          method: post
السلوك الفعلي:
$ sls deploy
Serverless: Zipping service...
Serverless: Removing old service versions...
Serverless: Uploading .zip file to S3...
Serverless: Updating Stack...
Serverless: Checking stack update progress...
.. 
  Serverless Error ---------------------------------------

     An error occurred while provisioning your cloudformation:
     The following resource(s) failed to create: [ResourceApigEventGetprofileUserProfile].

التعليق الأكثر فائدة

لا تنتظر! إلغاء هذا! إنه مجرد خطأ بسيط في الصياغة! شعب المستقبل! كانت مشكلتي هنا:

http://forum.serverless.com/t/deployment-error-a-sibling-did-of-this-resource-already-has-a-variable-path-part-only-one-is-allowed/795

في الأساس ، كان لدي وظيفتان على النحو التالي ، مع مسارين مثل هذا:

          path: tasks/{taskId}
          path: tasks/{taskToUpdate}

وكلا المسارين يحتاجان إلى نفس المفتاح ، لذلك كان يجب أن أستخدم {TaskId} في المرتين!

الطلب الوحيد الذي أقدمه للمطور الذي يرى هذا ربما هو إرسال رسالة خطأ أفضل من تلك التي تقدمها AWS.

functions:

  updateTask:
    handler: lib/endpoints.createTask
    events:
      - http:
          path: tasks/{taskToUpdate}
          method: put
          cors: true

  deleteTask:
    handler: lib/endpoints.deleteTask
    events:
      - http:
          path: tasks/{taskId}
          method: delete
          cors: true

ال 3 كومينتر

هذا أيضًا حل نفسه عن طريق إعادة إنشاء المكدس. # 1908

لدي هذا الخطأ أيضا. عندما أقوم بتشغيل "الإزالة بدون خادم" ، ثم "النشر بدون خادم -v" ، لم يتم حل المشكلة. هذه مشكلة نظرًا لأن لديّ واجهة برمجة تطبيقات عادية تتبع تنسيق CRUD القياسي (مثل إطار عمل django-rest أو مورد AngularJS. أريد الحصول على عناوين URL مثل:

POST    http://blahblah/task/            # Creates a new task
GET     http://blahblah/task/            # Gets all tasks
GET     http://blahblah/task/{taskId}    # Gets a specific task
PUT     http://blahblah/task/{taskId}    # Updates a specific task
DELETE  http://blahblah/task/{taskId}    # Deletes a specific task

أنا بخير مع القيام بأشياء غريبة لتحقيق ذلك ، أريد فقط تنسيق عنوان URL هذا.

هذا هو الخطأ الذي أحصل عليه:

Serverless: Deployment failed!

  Serverless Error ---------------------------------------

     An error occurred while provisioning your stack: ApiGatewayResourceTasksParenttaskidVar
     - A sibling ({taskId}) of this resource already has
     a variable path part -- only one is allowed.

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues

  Your Environment Information -----------------------------
     OS:                 win32
     Node Version:       7.0.0
     Serverless Version: 1.7.0

لا تنتظر! إلغاء هذا! إنه مجرد خطأ بسيط في الصياغة! شعب المستقبل! كانت مشكلتي هنا:

http://forum.serverless.com/t/deployment-error-a-sibling-did-of-this-resource-already-has-a-variable-path-part-only-one-is-allowed/795

في الأساس ، كان لدي وظيفتان على النحو التالي ، مع مسارين مثل هذا:

          path: tasks/{taskId}
          path: tasks/{taskToUpdate}

وكلا المسارين يحتاجان إلى نفس المفتاح ، لذلك كان يجب أن أستخدم {TaskId} في المرتين!

الطلب الوحيد الذي أقدمه للمطور الذي يرى هذا ربما هو إرسال رسالة خطأ أفضل من تلك التي تقدمها AWS.

functions:

  updateTask:
    handler: lib/endpoints.createTask
    events:
      - http:
          path: tasks/{taskToUpdate}
          method: put
          cors: true

  deleteTask:
    handler: lib/endpoints.deleteTask
    events:
      - http:
          path: tasks/{taskId}
          method: delete
          cors: true
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات