Node.js “刷新后”;发送到客户机后无法设置标题";
我使用expressjs、mongoose和ejs作为模板 当我刷新页面时,在第二次或第三次尝试中,我得到了这个错误 这是我的app.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
{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
你是对的,我完全忘了说,我在索引和登录页面上都有问题。非常感谢!我更改了代码。效果非常好!