- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当此代码到达重定向行时,它会抛出“发送后无法设置 header 错误”并且不会重定向。我对没有完全理解标题以及 express 如何与它们一起工作感到内疚。 This link about this error让我有点困惑,可能是因为我对正在发生的事情没有足够基本的了解。另外,我知道这是一种有点天真的身份验证方法,但我只是想让基本的东西起作用。
app.post('/api/login', function(req, res) {
if (req.body.password === auth.password) {
auth.date = new Date()
res.redirect('/admin')
} else {
console.log("wrong pw")
}
})
更新:感谢@Brendan Ashworth 我错过了一个明显的 else,我现在添加了它并且不再收到错误。
然而这一行并没有改变我页面的内容
res.sendfile('./public/admin/views/tunes.html')
在我用身份验证检查包装它之前它起作用了
var auth = require('../config/auth')
module.exports = function(app) {
/*
* CONTENT API
*/
//...
/*
* Admin Routes
*/
app.get('/admin/login', function(req, res) {
res.sendfile('./public/admin/views/login.html')
})
app.post('/api/login', function(req, res) {
if (req.body.password === auth.password) {
auth.date = new Date()
res.redirect('/admin')
} else {
res.json({message: 'Wrong password!'})
}
})
app.get('/admin', function(req, res) {
if (auth.date) {
res.sendfile('./public/admin/views/tunes.html')
console.log("test") //
} else { //added else
res.redirect('/admin/login')
}
})
app.get('/admin/:url', function(req, res) {
if (auth.date) {
res.sendfile('./public/admin/views/' + req.params.url + '.html')
} else { //added else
res.redirect('/admin/login')
}
})
// frontend routes
// route to handle all angular requests
app.get('*', function(req, res) {
res.sendfile('./public/views/index.html')
})
最后更新!!我需要做的最后一件事是在发送文件后处理重定向客户端。简单的身份验证现在可以完美地工作了!
$http.post('/api/login', $scope.auth).success(function() {
window.location.href = '/admin'
})
最佳答案
错误的解释Can't set headers after they are sent error
:
所有 HTTP 响应都遵循这个基本结构:
.. Response Line ..
.. Headers ..
.. Body ..
如果你想重定向一个用户,首先 Response Line
会被发送一个重定向代码(比方说 300),然后 Headers
会被发送一个位置:xxx
header 。
然后,我们终于可以发送一个主体(不是在重定向的情况下,而是一般情况下)。但是 - 对于您的代码 - 您正在发送 Body
响应 then 尝试重定向用户。由于 header (和响应行)都已发送(因为您发送了正文),它无法在正文之后发送更多 header 。
您的代码中的一个例子是:
app.get('/admin', function(req, res) {
if (auth.date) {
res.sendfile('./public/admin/views/tunes.html')
}
res.redirect('/admin/login')
})
如果我的假设是正确的,您实际上想要在 res.sendfile()
调用之后return
。如果 auth.date
是真实的,那么您将发送一个文件(即正文响应),然后提供重定向代码 - 这是行不通的。
关于node.js - 快速重定向错误 : can't set headers after they are sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372080/
我正在尝试使用谷歌浏览器的 Trace Event Profiling Tool分析我正在运行的 Node.js 应用程序。选择点样本后,我可以在三种 View 之间进行选择: 自上而下(树) 自上而
对于一个可能是菜鸟的问题,我们深表歉意,但尽管在 SO 上研究了大量教程和其他问题,但仍找不到答案。 我想做的很简单:显示一个包含大量数据库存储字符串的 Android ListView。我所说的“很
我已经开始了一个新元素的工作,并决定给 Foundation 5 一个 bash,看看它是什么样的。在创建带有水平字段的表单时,我在文档中注意到的第一件事是它们使用大量 div 来设置样式。所以我在下
我有一个 Windows 窗体用户控件,其中包含一个使用 BeginInvoke 委托(delegate)调用从单独线程更新的第 3 方图像显示控件。 在繁重的 CPU 负载下,UI 会锁定。当我附加
我有一堆严重依赖dom元素的JS代码。我目前使用的测试解决方案依赖于 Selenium ,但 AFAIK 无法正确评估 js 错误(addScript 错误不会导致您的测试失败,而 getEval 会
我正在制作一款基于滚动 2D map /图 block 的游戏。每个图 block (存储为图 block [21][11] - 每个 map 总共 231 个图 block )最多可以包含 21 个
考虑到以下情况,我是前端初学者: 某个 HTML 页面应该包含一个沉重的图像(例如 - 动画 gif),但我不想强制客户缓慢地等待它完全下载才能享受一个漂亮的页面,而是我更愿意给他看一个轻量级图像(例
我正在设计一个小软件,其中包括: 在互联网上获取资源, 一些用户交互(资源的快速编辑), 一些处理。 我想使用许多资源(它们都列在列表中)来这样做。每个都独立于其他。由于编辑部分很累,我想让用户(可能
我想比较两个理论场景。为了问题的目的,我简化了案例。但基本上它是您典型的生产者消费者场景。 (我关注的是消费者)。 我有一个很大的Queue dataQueue我必须将其传输给多个客户端。 那么让我们
我有一个二元分类问题,标签 0 和 1(少数)存在巨大不平衡。由于测试集带有标签 1 的行太少,因此我将训练测试设置为至少 70-30 或 60-40,因此仍然有重要的观察结果。由于我没有过多地衡量准
我是一名优秀的程序员,十分优秀!