У меня возникает небольшая проблема, когда я пытаюсь создать прототип объекта в моем приложении node / express.
Сначала я начинаю с создания такого прототипа:
Object.prototype.printObject = function () {
return console.info(this);
}
Теперь проблема в том, когда я вызываю эту функцию. Например, когда я вызываю такую функцию:
let request = {1:2}
request.printObject();
*//Logs {1:2}*
Ошибок не возникает. Но когда я вызываю функцию вот так:
let request = req.body
request.printObject();
Моя программа вылетает с ошибкой: TypeError: request.printObject is not a function
Кто-нибудь знает, почему это происходит?
Надеюсь, вы уже знаете, что изменять свойство prototype любого класса, который не принадлежит / не написан вами, - очень плохая идея.
Значение - это тело запроса, отправленного через Postman. В данном случае: {email: "[email protected]', password: 'testing1234'}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


если вам требуется ('body-parser')? или req.body undefined, вам нужно сделать это в первую очередь
var bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))
Вместо попытки создать прототип любого объекта вы можете создать такую функцию промежуточного программного обеспечения:
app.use(function (req, res, next) {
console.info('req');
//you could also add any function to req,even so thats not a common thing to do
req.printObject = function { ... }
next();
});
Вероятно, проблема с вашим подходом заключается в том, что вы добавляете функцию в прототип объекта после того, как объект запроса был создан. (Обновлено: это неверно, см. Комментарии)
прототипы являются общими, поэтому изменение после создания объекта не будет проблемой
Вы добавили метод printObject к прототипу Object. Итак, если req.body - это Объект, вы должны иметь возможность вызвать метод.
Попробуйте проверить тип req.body с помощью console.info(typeof req.body), чтобы убедиться, что это объект.
Если это не так, вы должны использовать узел узла 'body-parser' для заполнения req.body проанализированным содержимым тела.
Например, части вашего серверного кода могут выглядеть так:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json()); // Data is being sent to the server in JSON format
app.post('/my/endpoint', function(req, res){
req.body.printObject();
});
Модуль body-parser поддерживает и другие форматы. В качестве примера я использовал JSON. Вы можете найти все, что они поддерживают, здесь: https://www.npmjs.com/package/body-parser
Я проверил тип объекта, и он действительно вернул, что это объект. также консольный журнал самого объекта возвращает объект JSON со значениями.
Вы абсолютно уверены, что код, который присоединяет метод printObject к прототипу объекта, выполняется до того, как вы попытаетесь вызвать его на req.body? Не могли бы вы опубликовать более длинный фрагмент кода, показывающий, где именно вы прикрепляете метод к прототипу и где вы его вызываете?
В чем ценность
req.body?