【问题标题】:Node router returning response by itself节点路由器自己返回响应
【发布时间】:2021-02-18 22:42:21
【问题描述】:

这可能非常简单,但我真的很困惑。 当我通过邮递员或前端点击我的节点 /verify 端点时,当 /verify 端点中有非“响应”值/函数时,将自动发回来自后端的 200 响应。

例如,如果我让函数变得非常简单:

这将返回 200 响应,即使我似乎没有在任何地方设置“响应”。

router.post('/verify', (request, response, next) => {
  code = code.toUpperCase();
});

这不会发回 200 响应(我认为不应该,因为我没有设置任何响应)

router.post('/verify', (request, response, next) => {
  const { code } = request.body;
  console.log(code);
});

谁能向我解释发生了什么事?我希望需要像下面的示例那样引用响应来推送响应

response.status(401).send("Lorem ipsum");

response.json(token);

谢谢

整个页面(不包括不应影响此的其他 API 调用)

const poolArray = require('../../db');
const { Router } = require('express');
const router = Router();
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');

router.post('/verify', (request, response, next) => {
  // let { code } = request.body; //if commented out will send 200 back automatically, if not commented out won't pass 200 back automatically
  code = code.toUpperCase();
})

module.exports = router;

我的 index.js:

const { Pool } = require('pg');
const oracledb = require('oracledb');
oracledb.outFormat = oracledb.OUT_FORMAT_OBJECT;

const { langleyUser, langleyHost, langleyDatabase, langleyPassword, langleyPort, onboardingUser, onboardingHost, onboardingDatabase, onboardingPassword, onboardingPort } = require('../secrets/db_configuration');

const langley = new Pool({ user: langleyUser, host: langleyHost, database: langleyDatabase, password: langleyPassword, port: langleyPort });
const onboarding = new Pool({ user: onboardingUser, host: onboardingHost, database: onboardingDatabase, password: onboardingPassword, port: onboardingPort });

const poolArray = {
    langley,
    onboarding
}

module.exports = poolArray;

中间件

const jwt = require('jsonwebtoken');

module.exports = (request, response, next) => {
  try {
    console.log(' in check auth request');
    const decoded = jwt.verify(request.headers.authorization, 'bFm3Vp4Ga@cG6W');
    request.userData = decoded;
    next();
  } catch (error) {
    return response.status(404).json({
      message: 'Authentication failed'
    })
  }

};

【问题讨论】:

  • 我预计第一个 sn-p 会崩溃,因为 code 没有在任何地方定义。 Express 将处理此异常并通常发回 500 错误,而不是 200 成功。你能向我们展示你展示这种行为的完整程序吗?
  • 已更新代码,不确定我还能添加什么。如果您有想要查看的文件,请告诉我
  • 可以添加注册中间件的部分吗?例如,app.use(something)
  • 已添加,谢谢

标签: javascript node.js


【解决方案1】:

我相信 Express 在未指定响应时会返回 200 OK (?)。如果您想继续到另一个中间件层,请致电next()

【讨论】:

  • 好的,谢谢,也许这只是预期的行为。虽然我的代码中的错误会导致发送 200 吗?我原以为代码中的错误要么不会导致发送响应,要么会发送状态错误代码。
  • @MattBerry 代码中的错误会导致 Express 发送 500 Internal Server Error,请求正文将是错误消息和堆栈跟踪,您会看到错误消息和堆栈跟踪打印到控制台。
  • 在我的情况下不会发生这种情况。控制台没有错误,并返回 200 响应。把我难住了。
猜你喜欢
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多