【发布时间】:2017-01-28 09:34:32
【问题描述】:
我是 Connect.js 的新手,我正试图弄清楚它是如何工作的。我写了一个非常简单的函数——读取一个文件并打印它。我不确定为什么会收到此错误错误:发送后无法设置标头。任何帮助将不胜感激!
我研究过这个问题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,后面没有回调,所以程序crash了。
这是工作代码。我希望它对其他人有用:
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);
【问题讨论】:
-
writeHead立即写入标头。您不能将writeHead与写入响应的其他方法结合使用。请参阅我已将其标记为重复的问题。 -
这意味着我必须将数据参数传递给最后一个回调并将其设置在那里?对吗?
标签: node.js connect.js