Error: Can't set headers after they are sent. Connect.js
Error: Can't set headers after they are sent. Connect.js
我是 Connect.js 的新手,我想弄清楚它到底是如何工作的。我写了一个非常简单的函数——读取文件并打印它。我不确定为什么会收到此错误 错误:发送后无法设置 headers。 非常感谢任何帮助!
我研究过这个问题Nodejs: Connect and “writeHead” in first connect-callback。很有帮助,但是还是没有解决我从文件中读取的数据如何传递的问题。
代码如下:
var connect = require('connect'),
path = require('path'),
url = require('url'),
fs = require('fs');
const hostname = '127.0.0.1';
const port = 3030;
var interceptorFunction = function (req, res, next) {
fs.readFile(__dirname + "/docs/test.html", 'utf-8', function (error, data) {
if (error) {
res.writeHead(500);
return res.end('Error');
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end('Success');
});
next();
}
var server = connect()
.use(interceptorFunction);
server.listen(port, hostname, function () {
console.log('Server running at http://' + hostname + ':' + port + '/');
});
感谢下面的回答和 Nodejs: Connect and “writeHead” in first connect-callback,我设法生成了一个工作代码。我遇到的关于 Connect.js 的问题之一是关于 next()
的用法。由于应用程序非常简单,我使用的是next,后面没有回调,所以程序崩溃了。
这是工作代码。我希望它可能对其他人有用:
var connect = require('connect');
var fs = require('fs');
var simpleApp = connect();
simpleApp
.use(function (req, res, next) {
fs.readFile(__dirname + "/docs/test.html", 'utf-8', function (error, data) {
if (error) {
res.statusCode = 500;
return res.end();
}
res.statusCode = 200;
res.setHeader('Content-Type', 'text/html');
return res.end(data);
});
console.log('Pre');
next();
console.log('Post');
})
.use(function (req, res) {
console.log('Some other functionality here');
});
simpleApp.listen(3030);
而不是:
res.writeHead(500);
return res.end('Error');
你可以试试这个快递 4.x:
res.status(500);
res.send('Error');
return res.end();
或者这个用于 Express 3.x:
res.send(500, 'Error');
return res.end();
或此用于不使用 Express 的连接:
res.statusCode = 500;
return res.end('Error');
而不是:
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end('Success');
你可以试试 Express 4.x:
res.status(200);
res.type('html');
res.send(data);
return res.end();
或者这个用于 Express 3.x:
res.set('Content-Type', 'text/html');
res.send(200, data);
return res.end();
或此用于不使用 Express 的连接:
res.statusCode = 200;
res.setHeader('Content-Type', 'text/html');
return res.end(data);
等它可以使用一些快捷方式来编写,但在这里我明确地写了所有内容以显示正在发生的事情。
请注意,如果您已经在编写 data
,则无需在末尾添加 'Success' 字符串。
我的建议是,如果您是 Connect 的新手并且在编写代码时遇到问题,那么也许您可以尝试 Express。它使用起来更方便并且有更好的文档 - 请参阅:
- 连接文档:http://www.senchalabs.org/connect/
- 快递 3.x 文档:https://expressjs.com/en/3x/api.html
- 快递 4.x 文档:https://expressjs.com/en/4x/api.html
有关服务静态文件 n 节点的更多信息,请参阅 。
我是 Connect.js 的新手,我想弄清楚它到底是如何工作的。我写了一个非常简单的函数——读取文件并打印它。我不确定为什么会收到此错误 错误:发送后无法设置 headers。 非常感谢任何帮助!
我研究过这个问题Nodejs: Connect and “writeHead” in first connect-callback。很有帮助,但是还是没有解决我从文件中读取的数据如何传递的问题。
代码如下:
var connect = require('connect'),
path = require('path'),
url = require('url'),
fs = require('fs');
const hostname = '127.0.0.1';
const port = 3030;
var interceptorFunction = function (req, res, next) {
fs.readFile(__dirname + "/docs/test.html", 'utf-8', function (error, data) {
if (error) {
res.writeHead(500);
return res.end('Error');
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end('Success');
});
next();
}
var server = connect()
.use(interceptorFunction);
server.listen(port, hostname, function () {
console.log('Server running at http://' + hostname + ':' + port + '/');
});
感谢下面的回答和 Nodejs: Connect and “writeHead” in first connect-callback,我设法生成了一个工作代码。我遇到的关于 Connect.js 的问题之一是关于 next()
的用法。由于应用程序非常简单,我使用的是next,后面没有回调,所以程序崩溃了。
这是工作代码。我希望它可能对其他人有用:
var connect = require('connect');
var fs = require('fs');
var simpleApp = connect();
simpleApp
.use(function (req, res, next) {
fs.readFile(__dirname + "/docs/test.html", 'utf-8', function (error, data) {
if (error) {
res.statusCode = 500;
return res.end();
}
res.statusCode = 200;
res.setHeader('Content-Type', 'text/html');
return res.end(data);
});
console.log('Pre');
next();
console.log('Post');
})
.use(function (req, res) {
console.log('Some other functionality here');
});
simpleApp.listen(3030);
而不是:
res.writeHead(500);
return res.end('Error');
你可以试试这个快递 4.x:
res.status(500);
res.send('Error');
return res.end();
或者这个用于 Express 3.x:
res.send(500, 'Error');
return res.end();
或此用于不使用 Express 的连接:
res.statusCode = 500;
return res.end('Error');
而不是:
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end('Success');
你可以试试 Express 4.x:
res.status(200);
res.type('html');
res.send(data);
return res.end();
或者这个用于 Express 3.x:
res.set('Content-Type', 'text/html');
res.send(200, data);
return res.end();
或此用于不使用 Express 的连接:
res.statusCode = 200;
res.setHeader('Content-Type', 'text/html');
return res.end(data);
等它可以使用一些快捷方式来编写,但在这里我明确地写了所有内容以显示正在发生的事情。
请注意,如果您已经在编写 data
,则无需在末尾添加 'Success' 字符串。
我的建议是,如果您是 Connect 的新手并且在编写代码时遇到问题,那么也许您可以尝试 Express。它使用起来更方便并且有更好的文档 - 请参阅:
- 连接文档:http://www.senchalabs.org/connect/
- 快递 3.x 文档:https://expressjs.com/en/3x/api.html
- 快递 4.x 文档:https://expressjs.com/en/4x/api.html
有关服务静态文件 n 节点的更多信息,请参阅