Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js “刷新后”;发送到客户机后无法设置标题";_Node.js_Express - Fatal编程技术网

Node.js “刷新后”;发送到客户机后无法设置标题";

Node.js “刷新后”;发送到客户机后无法设置标题";,node.js,express,Node.js,Express,我使用expressjs、mongoose和ejs作为模板 当我刷新页面时,在第二次或第三次尝试中,我得到了这个错误 这是我的app.js: {consts..} var index = require('./routes/index.js'); var users = require('./routes/users.js'); app.set("port", ("2401")); app.set("views", __dirname + "/views"); app.set("view e

我使用expressjs、mongoose和ejs作为模板

当我刷新页面时,在第二次或第三次尝试中,我得到了这个错误

这是我的app.js:

{consts..}

var index = require('./routes/index.js');
var users = require('./routes/users.js');

app.set("port", ("2401"));
app.set("views", __dirname + "/views");
app.set("view engine", "ejs");
app.use(express.static(path.join(__dirname, 'public')));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.use('/', index);
app.use('/users', users);

var port = '2401';
app.set('port', port);

var server = http.createServer(app);

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);


function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  console.log('server started on port : ' + app.get('port'));
}
用户路由器:

{consts..}

router.get('/login', function (req, res) {
   users.getLogin(req, res);
});

router.post('/login', [
    check('email')
        .isEmail().withMessage('Please enter a valid email address')
        .trim()
        .normalizeEmail(),
    check('terms', 'Please accept our terms and conditions').equals('yes'),
],
    function (req, res) {
        users.postLogin(req, res);
    });

module.exports = router;
和控制器:

usersController.getLogin = function (req, res) {
    const connector = mongoose.connect(conStr, { useNewUrlParser: true, useUnifiedTopology: true });
    mongoose.connection.on('open', function (ref) {
        categories.find(function (err, cats) {
            if (err) {
                console.log("Error:", err);
            }
            else {
                    return res.render("../views/login.ejs", {
                    _: _,
                    categories: cats
                });
            }
        });
    });
}
索引路由器:

var express = require('express');
var router = express.Router();
var index = require("../controllers/indexController.js");

router.get('/', function (req, res) {
  index.list(req, res);
});
module.exports = router;
索引控制器:

var mongoose = require("mongoose");
var categories = require("../models/categories.js");
var _ = require("underscore");

var indexController = {};

indexController.list = function (req, res) {
  const connector = mongoose.connect(conStr, { useNewUrlParser: true, useUnifiedTopology: true });
  mongoose.connection.on('open', function (ref) {
    categories.find(function (err, cats) {
      if (err) {
        console.log("Error:", err);
      }
      else {
        console.log("indexe geldi");
        return res.render("../views/index.ejs", {
          _: _,
          categories: cats,
          sess: req.session
        });
      }
    })
  })
};

module.exports = indexController;
我几乎什么都试过了,但还是没有进展。这可能是关于“next()”的用法吗


我还尝试了使用exec()的next、mongoose find函数的HORE router get/post函数。

问题是,您在每个路由中都打开了与mongo的连接,并且:

mongoose.connection.on('open'
正在为过去的请求触发,这些请求已经完成,这就是为什么
发送到客户端后无法设置头的原因

移动
猫鼬。将侦听器连接到每条路由之外

usersController.getLogin = function (req, res) {

    categories.find(function (err, cats) {
            if (err) {
                console.log("Error:", err);
                return res.status(500).send('error');
            }
            else {
                    return res.render("../views/login.ejs", {
                    _: _,
                    categories: cats
                });
            }
      });

}

是的,我不使用next,这就是为什么我想知道它是否正确。我现在复制了app.js。你点击哪个端点来获取错误,POST/get
/users/login
?你缺少
索引
路由代码。我添加了索引路由器。我在“get”时收到此错误。但是不是第一次,但是当我刷新页面时,但是你在访问哪个页面,哪个端点,并且你缺少索引控制器,需要查看
index.list
你是对的,我完全忘了说,我在索引和登录页面上都有问题。非常感谢!我更改了代码。效果非常好!