Если в пользовательской функции возникает ошибка, я хотел бы остановить выполнение сценария и вернуть ответ с ошибкой 500.
Однако мой сценарий запускает ошибку, а затем продолжает сценарий.
. / Helpers. js
const requiredEnv = (vars, callback) => {
const unsetEnv = vars.filter((varName) => !(typeof process.env[varName] !== 'undefined'));
let error;
if (unsetEnv.length > 0) {
error = "Required ENV variables are not set: [" + unsetEnv.join(', ') + "]";
}
callback(error);
}
module.exports = { requiredEnv };
. / Route. js
const express = require('express');
const router = express.Router();
const requiredEnv = require('./requiredEnv');
router.post('/', (req, res) => {
requiredEnv(['MY_VAR'], (error) => {
console.log('this is an error shown in the console');
res.status(500).send({ error });
// should stop this script here...
});
// somehow it continues here, even though the previous callback function is returning an error
console.log('this is continued');
res.status(200).send({ message: 'Message sent' });
});
module.exports = router;
Я пробовал next()
, но это не сработало.
обновление
У меня почти все заработало. (спасибо @oooyaya & @ ayu sh)
const middlewareFoo = function(_, res, next) {
requiredEnv(['MY_VAR'], function (error) {
if (error) {
// ✓ it stops when MY_VAR is not present
return res.status(500).send({ error });
} else {
// ✗ when MY_VAR is defined, it does not continue...
console.log('continue if no error...');
next()
}
});
}
router.use(middlewareFoo);
router.post('/', (req, res) => {
// ... left out for brevity
Но если ошибок нет, он не работает. Похожая проблема, наверное.