【问题标题】:Error when trying to fetch data from mongodb: Can't set headers after they are sent尝试从 mongodb 获取数据时出错:发送后无法设置标头
【发布时间】:2018-01-22 20:20:07
【问题描述】:

我正在检查数据库中是否已经存在 JOB(通过 JOBID),如果存在,则在视图页面中显示它。

我正在尝试通过 Nodejs、Express 路由器和控制器从 MongoDB 获取数据到 HTML 视图页面。我想问题出在路由器页面上。我不确定如何将数据从节点传递到路由器以及从路由器传递到控制器。我有 JOBID 我需要获取与该作业 ID 对应的所有详细信息并将其显示在视图页面中。你能帮我么?

路由器代码:

router.post('/RequirementView',function(req,res)
{
    addRequirement.requirementView(req,res);
    res.send(res.requirement);
});

NodeJS 代码:

exports.requirementView = function(req, res) {
    if (req.body.JobID) {
      RequirementModel.findOne({ 'JobID': req.body.JobID }, function(err, requirement) {
            if (requirement != null) {
              requirement.Vertical = req.body.Vertical || requirement.Vertical;
              requirement.save(function(err) {
                res.status(200).send(requirement);
              });

【问题讨论】:

    标签: node.js express mean-stack


    【解决方案1】:

    你正在做 res.send() 两次。尝试删除 res.send(res.requirement);因为你已经在 requirementsView 模块中发送了响应

    【讨论】:

      【解决方案2】:

      这不是 Mongo 的问题。

      问题是由两次调用 res.send() 引起的 - 一次在 exports.requirementView 中,然后第二次在 /RequirementView 处理程序中。

      它被调用了两次,因为在你的路由处理程序中你首先调用:

      addRequirement.requirementView(req,res);
      

      (包括es.status(200).send(requirement);

      然后:

      res.send(res.requirement);
      

      这是对res.send() 的第二次调用。

      【讨论】:

      • 如何解决这个问题 我的控制器是 main.controller('requirementDetailedViewController', function ($scope, $http, $rootScope, $location) { $scope.DetailedViewRequirement = function() { $http. post('requirement/RequirementView',$rootScope.item).success(function(data){ if(data){ $location.path('RequirementDetailedView'); } else{ $scope.error_message = data.message; $rootScope .sess = null; } }); }
      • 我的控制器总是空的
      猜你喜欢
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 2018-06-29
      • 2013-12-22
      相关资源
      最近更新 更多