Функция, возвращающая код
На сервере есть модуль:
const handlers = {
isExists() {
return function(user) {
if (!user) {
return res.status(200).json({
msg: "Такого пользователя не существует"
});
}
};
}
}
module.exports = handlers;
При попытке вызвать возвращает ошибку:
const express = require('express');
const handlers = require('../modules/handlers');
const router = express.Router();
router.post('/edit',
async(req, res) => {
try {
handlers.isExists()(null);
} catch (err) {
return res.status(500).json({
msg: config.get("500err"),
err: err.stack
})
}
}
);
{
"msg": "Непредвиденная ошибка, попробуйте снова",
"err": "ReferenceError: res is not defined\n at C:\\path\\modules\\handlers.js:5:17\n at C:\\path\\routes\\news.routes.js:93:32\n at processTicksAndRejections (internal/process/task_queues.js:97:5)"
}
Так же пытался вызывать так:
const isExists = handlers.isExists();
isExists(null)
Все равно вылазит ошибка.
Как её можно исправить и почему она происходит?
Если передавать res в функцию, то вылазит другая ошибка
isExists(null, res)
const handlers = {
isExists() {
return function(user, res) {
if (!user) {
return res.status(200).json({
msg: "Такого пользователя не существует"
});
}
};
}
}
module.exports = handlers;
UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Лексическое окружение для функции создаётся при создании функции, а не при её вызове. То, что происходит у вас, можно упростить до такого кода:
function foo() {
console.log(bar);
}
{
const bar = 42;
foo();
}
Как вы видите, у функции нет доступа к контексту вызова, только к контексту создания.