Javascript 如何返回状态500并停止运行该路由的脚本

Javascript 如何返回状态500并停止运行该路由的脚本,javascript,node.js,express,Javascript,Node.js,Express,如果自定义函数中发生错误,我希望停止脚本运行,并返回带有500个错误的响应 但是,我的脚本正在运行错误,稍后将继续执行脚本 /helpers.js constrequiredenv=(变量,回调)=>{ const unsetEnv=vars.filter((varName)=>!(typeof process.env[varName]!=='undefined'); 让错误; 如果(未设置环境长度>0){ error=“未设置必需的环境变量:[“+unsetEnv.join(',')+”];

如果自定义函数中发生错误,我希望停止脚本运行,并返回带有500个错误的响应

但是,我的脚本正在运行错误,稍后将继续执行脚本

/helpers.js

constrequiredenv=(变量,回调)=>{
const unsetEnv=vars.filter((varName)=>!(typeof process.env[varName]!=='undefined');
让错误;
如果(未设置环境长度>0){
error=“未设置必需的环境变量:[“+unsetEnv.join(',')+”];
}
回调(错误);
}
module.exports={requiredEnv};
/route.js

const express=require('express');
const router=express.router();
const requiredEnv=require('./requiredEnv');
路由器.post(“/”,(请求,res)=>{
requiredEnv(['MY_VAR',(错误)=>{
log('这是控制台中显示的错误');
res.status(500).send({error});
//应该在此处停止此脚本。。。
});
//尽管前一个回调函数返回错误,但它仍会继续
console.log(“这是继续的”);
res.status(200).send({message:'messagesent'});
});
module.exports=路由器;
我尝试了
next()
,但没有成功


更新 我几乎让它工作了。(谢谢@Ooyaya和@ayush)


但如果没有错误,它就不起作用了。类似的问题我猜。

未经测试,但这可能会让你更接近。问题是您正在运行异步代码,因此
res.send(200)
在回调到
requiredEnv()
回调之前发生。它们需要存在于同一个回调中,您可以检查是否存在错误。如果是这样,
res.status(500)
。如果没有,则恢复状态(200)


只要抛出一个错误,它就会停止运行,
express
会自动向用户发送500个状态。当然,您应该小心使用异步代码。还请注意,如果您的
if()
有返回值,则不需要
else{}
。这有助于避免某些超深嵌套节点容易出现的问题。建议您将
requiredEnv
调用提取到midddleware@oooyaya我知道如何使用相同的回调。但我可以想象,它很快就变成了回调中的回调地狱(等等)。即使我没有使用承诺或等待,我的代码是否是异步的?@AyushGupta我已经使用中间件更新了答案(很好的建议!)。但我似乎也有同样的问题。@Remi查看了您的
requiredEnv
实现,如果没有错误,您似乎不会调用回调。@oooya哦,我在问题中谈论的是
requiredEnv
的OPs实现。如果没有错误,OP不会调用回调。在这种情况下也需要调用回调,只需出现一个null错误。另一方面,控制不到积极的情况。
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
const express = require('express');
const router = express.Router();

router.post('/', (req, res, next) => {
  requiredEnv(['MY_VAR'], (error) => {
    if(error) {
        console.log('this is an error shown in the console');
        res.status(500).send({ error });
        // should stop this script here...
        return;
    }

    console.log('this is continued');
  
    res.status(200).send({ message: 'Message sent' });
  });


});
module.exports = router;