首页 > 解决方案 > express.js 返回不必要的数据

问题描述

我刚刚使用 Express.js 制作了简单的 REST API,但是 express 返回了不必要的数据。

这是响应数据:

{
    "code": 200,
    "status": "success",
    "message": "Success",
    "device_code": "2F1E6DB930",
    "data": [
        {
            "_id": "5d84801cd3906f1e5cbec0c4"
        },
        {
            "_id": "5d848032d3906f1e5cbec0c6"
        },
        {
            "_id": "5d8480bbd3906f1e5cbec0ca"
        }
    ]
}

不需要“数据”对象,因为我没有在我的代码中返回它

exports.register = async (req, res) => {
  if (utils.checkBody(req.body, utils.authBody)) {
    let User = services.db.collection('users')

    let deviceCode = Math.random().toString(16).substr(2, 10).toUpperCase()

    await User.insertOne({
      username: req.body.username,
      password: md5(req.body.password + process.env.SECRET_KEY),
      kode_device: deviceCode
    })

    response = Object.assign(utils.requestResponse.success, { device_code: deviceCode })
  } else {
    response = utils.requestResponse.incomplete_body
  }

  res.status(response.code).json(response)
}

// request response success

const requestResponse = {
  success: {
    code: 200,
    status: 'success',
    message: 'Success'
  }
}

我返回的唯一“数据”对象位于另一个端点(比如说“显示数据”),这是代码

exports.show = async (req, res) => {
  if (req.params.device_code) {
    let General = services.db.collection(req.params.device_code)
    let query = undefined

    if (req.query.last_id === undefined || req.query.last_id === '') {
      query = {}
    } else {
      query = { _id: { '$gt':  ObjectId(req.query.last_id) } }
    }

    let data = await General.find(query).limit(10).toArray()

    response = Object.assign(utils.requestResponse.success, { data: data })
  } else {
    response = utils.requestResponse.incomplete_body
  }

  res.status(response.code).json(response)
}

我制作了一个脚本来集群应用服务器代码并运行nodemon

require('dotenv').config()
const cluster = require('cluster')
const AppServer = require('./app')

if (cluster.isMaster) {
  let cpuCount = require('os').cpus().length

  for (let i = 0; i < cpuCount; i += 1) {
    cluster.fork()
  }
} else {
  console.log(`Server is running on ${process.env.PORT}`)
  AppServer.listen(process.env.PORT)
}
cluster.on('exit', (worker) => {
  console.log('server',`Worker %d die ${worker.id}`);
  cluster.fork();
})

有什么解决办法吗?谢谢你。

标签: javascriptnode.jsexpress

解决方案


您是否尝试utils.requestResponse.success在发送之前查看其内容?

提示:有一种调试方法。在请求开始的时候下一个断点,一步一步去,直到你看到data你的响应对象中有一个属性,分析这部分代码中涉及的所有变量。你会注意到问题是你的utils.requestResponse.success对象。

这样,您会注意到Object.assign将修改作为第一个参数传递的对象,因此当show调用端点时,您会注意到它utils.requestResponse.success已被修改并data添加了一个属性。和做的一样:

utils.requestResponse.success.data = data;

您必须传递一个空对象{}作为第一个参数、utils.requestResponse.success第二个和{data: data}第三个参数。这样修改的对象就是刚刚创建的第一个空对象。


推荐阅读