javascript - 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();
})
有什么解决办法吗?谢谢你。
解决方案
您是否尝试utils.requestResponse.success
在发送之前查看其内容?
提示:有一种调试方法。在请求开始的时候下一个断点,一步一步去,直到你看到data
你的响应对象中有一个属性,分析这部分代码中涉及的所有变量。你会注意到问题是你的utils.requestResponse.success
对象。
这样,您会注意到Object.assign
将修改作为第一个参数传递的对象,因此当show
调用端点时,您会注意到它utils.requestResponse.success
已被修改并data
添加了一个属性。和做的一样:
utils.requestResponse.success.data = data;
您必须传递一个空对象{}
作为第一个参数、utils.requestResponse.success
第二个和{data: data}
第三个参数。这样修改的对象就是刚刚创建的第一个空对象。
推荐阅读
- c - 尽管逻辑多次正确检查,但给出错误的一些值
- pandas - 如何使用布尔输出处理预测
- javascript - 如何修复此 Javascript 程序中的移动错误,使其在我同时按下两个键时不会中断?
- ios - SwiftUI 性能问题,iOS 14.2 中的 UI 滞后
- python - 如何访问熊猫多索引数据框中的特定行
- java - 如何使用 java regex 删除 MS Word 不必要的 html 标签
- java - Java 泛型 - 使用泛型接口及其实现的最佳方式
- python - 需要 Python 3.7 中的 Mysql 查询以从具有列 (table_no, is_new) 的表中选择记录
- python - QSortFilterProxyModel 隐藏 QWidget
- c++ - 模板成员函数无法自动推断类型