Ненужные данные, возвращаемые express.js - PullRequest
0 голосов
/ 20 сентября 2019

Я только что создал простой REST API, используя Express.js, но экспресс возвращает ненужные данные.

Вот данные ответа:

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

Объект "data"не нужен, потому что я не возвращал его в своем коде

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'
  }
}

Единственный объект «data», к которому я вернулся, находится в другой конечной точке (скажем, «show data»), и вот код

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();
})

Есть ли какое-нибудь решение?Спасибо.

1 Ответ

1 голос
/ 20 сентября 2019

Вы пытались просмотреть содержимое utils.requestResponse.success перед отправкой?

Как совет: есть способ отладить это.Установите точку останова при запуске запроса и переходите к этапу, пока не увидите, что в вашем объекте ответа есть свойство data, анализирующее все переменные, включенные в эту часть кода.Вы заметите, что проблема в вашем utils.requestResponse.success объекте.

Таким образом, вы заметите, что Object.assign изменит объект, переданный в качестве первого аргумента, поэтому при вызове конечной точки show вы заметитечто utils.requestResponse.success изменено и к нему добавлено свойство data.То же самое, что и:

utils.requestResponse.success.data = data;

Вы должны передать пустой объект {} в качестве первого аргумента, utils.requestResponse.success в качестве второго и {data: data} в качестве третьего аргумента.Таким образом, измененный объект - это первый только что созданный пустой объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...