Что бы вы ни пытались сделать с этим:
const res = require('express').response
выглядит ошибочно. Свойство .response
объекта Express не является объектом прямого ответа. Если вы посмотрите на соответствующую часть Express кода , вы увидите, что require('express').response
- это модуль ответа (и все, что он экспортирует). Это методы, которые будут использоваться для объекта живого ответа, но еще не для объекта живого ответа. Это просто экспортированные методы, которые в конечном итоге будут присоединены к объекту живого ответа. Вы не можете использовать их таким образом, пока они не будут присоединены к действующему объекту ответа.
Если вы посмотрите дальше на ./response.js
в Express проекте , вы увидите, что require('express').response
на самом деле является прототипом, полученным из http.ServerResponse.prototype
, который Express будет использовать позже при создании объекта живого ответа.
Когда вы на самом деле вызываете res.send()
в этой версии прототипа res
, он появляется что первый метод, который он может вызвать на самом деле, находится в этом разделе кода :
if (!this.get('Content-Type')) {
Поскольку this
неверно при попытке использовать прототип таким образом, не будет .get()
, и вы получите ошибку, которую видите.
Таким образом, когда вы попытаетесь использовать этот объект res
так же, как вы используете объект живого ответа, вы получите какая-то ошибка. Мы должны были бы иметь возможность отладить ваш точный код, чтобы объяснить, почему он жалуется именно так, как он это делает (возможно, задействован геттер и, следовательно, сообщение об ошибке ссылается на get
- это только предположение). Но совершенно очевидно, что res
используется неправильно.
Если вы покажете больше контекста вашего кода (включая весь обработчик запросов), мы можем сделать больше предположений о том, как это следует делать быть написано. Если вы хотите получить более подробную информацию о том, почему ошибка возникает именно так, как надо, нам нужно иметь возможность запустить эту часть кода, чтобы отладить ее и посмотреть, что именно происходит. В любом случае вам нужно изменить, откуда вы получите res
.
Чтобы протестировать вашу create()
функцию, которая использует объект ответа http, вы можете либо создать реальный объект ответа http (включая реальный запрос / ответ http) или создайте фиктивный объект ответа http и подключите соответствующие методы, чтобы увидеть, выполняет ли функция то, что должна. Вы можете прочитать любое количество статей здесь о различных идеях насмешки над объектом ответа http.