下面的代码nodejs +express出错如何解决

node express Cannot set headers after they are sent to the client

下面的代码nodejs +express出错如何解决

img


img

app.get("/login"路由中最后的next()那句去掉。next会执行下一个中间件代码,由于没有下一个中间件可以执行,会走404错误处理输出错误响应。这样和异步查询数据的sendRes重复了。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7787436
  • 以下回答由chatgpt基于相关博客总结生成:

    根据提供的参考资料,无法确定正在使用哪个版本的NodeJS和Express框架,因为代码没有明确指定版本信息。以下代码是部署静态资源的示例:

    const express = require('express');
    
    const app = express();
    
    app.use(express.static('./build'));
    
    app.listen(8000, () => {
      console.log("静态服务器启动成功~");
    })
    

    其中 express.static 是用来静态资源的方法,将 ./build 目录下的静态资源部署到服务器上,该服务运行在 8000 端口上。

    关于请求解析和处理参数的部分,以下是部分示例代码:

    通过参数传递:

    app.use('/login/:id/:name', (req, res, next) => { // 定义路由路径,:id和:name是参数
      console.log(req.params); // 可以通过req.params获取参数信息
      res.json("请求成功~");
    })
    

    通过url查询字符串传递:

    app.use('/login', (req, res, next) => {
      console.log(req.query); // 可以通过req.query获取参数信息
      res.json("请求成功~");
    })
    

    通过POST请求中的body的JSON格式传递:

    自己编写中间件来解析JSON:

    app.use((req, res, next) => {
      if (req.headers['content-type'] === 'application/json') {
        req.on('data', (data) => {
          const userInfo = JSON.parse(data.toString());
          req.body = userInfo;
        })
        req.on('end', () => {
          next();
        })
      } else {
        next();
      }
    })
    
    app.post('/login', (req, res, next) => {
      console.log(req.body);
      res.end("登录成功~");
    });
    

    也可以使用Express内置的中间件或者使用body-parser来完成:

    app.use(express.json());
    
    app.post('/login', (req, res, next) => {
      console.log(req.body);
      res.end("登录成功~");
    });
    

    通过POST请求中的body的x-www-form-urlencoded格式传递:

    可以使用Express自带的 urlencoded 函数来作为中间件:

    app.use(express.urlencoded({extended: true}));
    
    app.post('/login', (req, res, next) => {
      console.log(req.body);
      res.end("登录成功~");
    });
    

    通过POST请求中的form-data格式传递:

    通过any借助multer去解析一些form-data中的普通数据:

    app.use(upload.any());
    
    app.use('/login', (req, res, next) => {
      console.log(req.body);
    });
    

    关于错误处理方式,以下是示例代码:

    app.use((req, res, next) => {
      next(new Error("USER DOES NOT EXISTS"));
    });
    
    app.use((err, req, res, next) => {
      const message = err.message;
    
      switch (message) {
        case "USER DOES NOT EXISTS":
          res.status(400).json({message})
      }
    
      res.status(500)
    })
    

    其中,第一个中间件会调用 next() 将控制权传递给下一个中间件,同时抛出 "USER DOES NOT EXISTS" 的错误。第二个中间件用来处理错误,判断错误信息,并给出相应的响应结果。如果错误信息是 "USER DOES NOT EXISTS",则返回 400 状态码,否则返回 500 状态码。

    需要注意的是,在请求过程中如果出现错误,在正确地处理完之后需要将错误信息传递给下一个中间件,否则会出现请求挂起的情况。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632