无法使用Express NodeJS从控制器获取数据



我需要从两个控制器获取数据,但是当我调用它们时,返回这个错误:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

另外,我想知道我是否必须在try部分中编写所有的逻辑。这是我的代码:

[更新自sharful Islam Mubin的回复]

DataMatching:匹配用户标签和活动的控制器

const { response } = require('express');
const { userData } = require("./userData");
const { getActivities } = require("./activities");
const DataMatching = async (req, res = response) => {
let userTags = [];
let activities = [];
let state = false;
let topActivities= {};
try {
userTags = await userData(req, res);
activities = await getActivities(req, res);
if (userTags.data.tags && activities){
userTags = userTags.data.tags;
state = true;
//doSomething
}
return res.json({
ok: state,
response: topActivities
});
}
catch (error) {
return res.status(500).json({
ok: state,
response: error
});
}
}
module.exports = {
DataMatching
}

userData:获取用户数据的控制器

const { response } = require('express');
const axios = require('axios');
const userData = async (req, res = response) => {
try {
let res_user = await axios.get(somePath, someConfig)
if (res_user.data.success === true) {
return res.json({
ok: true,
response: res_user.data
})
} else {
return res.status(500).json({
ok: false,
error: res_user.data.message
})
}
} catch (error) {
return res.status(500).json({
ok: true,
response: res_user
})
}
}
module.exports = {
userData
}

getActivities:获取活动数据的控制器

const { response } = require('express');
const Activity = require('../models/activity');
const getActivities = async (req, res = response) => {
const activities = await Activity.find().populate('tags')
try {
return res.json({
ok: true,
activities
});
}
catch (error) {
return res.status(500).json({
ok: false,
error: error
});
}
}

一旦你调用res对象,你必须要return它。因为,resresponse对象向客户端发送数据。在向客户端发送响应后,您不能返回任何内容。

所以你要写

return res.json({/*.. YOUR_CODE_GOES_HERE ..*/})

,

return res.status(500).json({/*.. YOUR_CODE_GOES_HERE ..*/})

我还注意到你调用了另外两个函数,它们也负责响应客户端。你不应该那样做。

  • 尝试只从请求的控制器返回响应,在这种情况下可能是DataMatching函数。
  • 你可以将DataMatching函数中的所有代码包装在try-catch块中,以处理函数中发生的任何异常。

相关内容

  • 没有找到相关文章

最新更新