2016-06-24 3 views
0

Есть ли соглашение об украшении объекта response с вашими собственными значениями.Пользовательское свойство на объекте ответа http

Я сталкиваюсь с ситуацией, когда я использую обещания, в которых я мог бы вернуть только одно значение, и мне нужно вернуть оба объекта body и response.

Я попытался создать объект формы, но не доволен им.

resolve({body: body, response: response}) 

или

response.body = body 
resolve(response); 

я наткнулся res.locals слишком для вдохновения.

Я хотел бы найти собственность на объект ответа, который может заселить например

response.locals = {}; 
response.locals.body = body 
resolve(response); 

Я попытался для поиска недвижимости на response объект, который каким-то образом может иметь этот body заполняется автоматически, но не мог. Пожалуйста, посоветуйте, как лучше.

Редактировать

Извините, если вопрос запутался с expressjs, это require('https')response объект.

ответ

1

Как и в случае с обещаниями, обычный способ возврата нескольких значений состоит в том, чтобы либо поместить их в массив, либо разрешить с помощью массива, либо поместить их в объект и разрешить с объектом (как вы это сделали). Я не знаю, почему именно вы недовольны:

resolve({body: body, response: response}) 

как типичный способ решить обещание с несколькими именованных значений. В ES6, можно даже сократить его:

resolve({body, response}) 

который только синтаксис ярлык для того же определения объекта.


С обычной оговоркой, чтобы быть осторожным, чтобы избежать конфликтов имен свойства со стандартными свойствами или свойствами любого другой кода может быть с помощью, вы можете добавить свои собственные свойства для response объекта. Этот объект живет только на время этого конкретного ответа, поэтому любые свойства, которые вы добавляете к нему, будут временными только для продолжительности этой обработки ответа.

Таким образом, ваш второй вариант прекрасно подходит тоже:

response.body = body 
resolve(response); 

Что касается будущего доказательства, используя свой собственный объект является самым на будущее, так как это ваш объект. Никто никогда не будет изменять его, и нет шансов на столкновение имен с этим первым вариантом.

Что касается добавления свойств объекта response, то не существует согласованного соглашения о том, как добавлять настраиваемые свойства к объекту ответа, который никогда не будет мешать будущему дизайну и эволюции объекта.Вероятно, вы безопасны, если добавить свой собственный префикс к названию свойства, например response._my_body, если вы действительно хотите пойти таким образом, чтобы увеличить ваши шансы быть в безопасности. Вы даже можете использовать локально сгенерированный символ ES6 в качестве имени свойства и быть на 100% уверенным в отсутствии столкновения, хотя это делает код немного более уродливым.

Лично я просто разрешаю свой объект или составляю свой собственный префикс имени пользовательского свойства.

+0

Недовольны, потому что не хотят обрабатывать несколько объектов, пытаясь разобрать что-то, что является будущим доказательством с объектом 'response' и приемлемым. – user2727195

+2

@ user2727195 - Разрешение с помощью собственного пользовательского объекта является будущим доказательством, поскольку вы не добавляете какие-либо настраиваемые свойства в объект ответа, который потенциально может повлиять на будущий дизайн и эволюцию этого объекта. Вы просто решаете свой собственный объект, у которого есть два свойства - это абсолютно безопасно сейчас и навсегда. – jfriend00

+1

@ user2727195 - Согласованного соглашения о том, как добавить пользовательские свойства к объекту ответа, не будет согласовано, что никогда не будет мешать будущему дизайну и эволюции объекта. Вероятно, вы безопасны, если добавить свой собственный префикс к имени свойства, например 'response._my_body', если вы действительно хотите пойти таким образом, чтобы увеличить ваши шансы быть в безопасности. Вы даже можете использовать локально сгенерированный символ ES6 как имя свойства и быть на 100% уверенным в отсутствии столкновения. – jfriend00

Смежные вопросы