节点如何将文件传递到http.write方法
Node how to pass file to http.write method?
我想将文件打印到res.write()
方法,但我得到错误:
TypeError: First argument must be a string or Buffer
我的代码:
var fs = require("fs");
var http = require("http");
http.createServer(function (req, res){
res.write(getData());
res.end();
}).listen(3333);
function getData(){
fs.readFile('testfs.txt', function(err, data){
if(err)
{
console.log("Error: " + err);
}else {
console.log(data.toString());
return data.toString();
}
});
}
怎么了?
res.write
既没有得到字符串也没有得到缓冲区,因为函数getData
不是异步的。以下是我希望能解决您问题的解决方案:
http.createServer(function (req, res){
getData(function(data){
res.write(data);
res.end();
}));
}).listen(3333);
function getData(cb){
fs.readFile('testfs.txt', function(err, data){
if(err)
{
console.log("Error: " + err);
}else {
cb(data.toString());
}
});
}
其中cb
参数显然是一个回调函数。
或者,您可以使用流:
const http = require('http');
const fs = require('fs');
http.createServer((req, res) => {
fs.createReadStream('testfs.txt')
.on('error', (e) => {
console.log('Error:', e);
res.statusCode = 500;
res.end();
})
.pipe(res)
}).listen(3333);
反过来做;只需调用getData并传入响应,然后在加载文件时,调用response.end(string).
相关文章:
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- Meteor如何接收HTTP请求
- 如何用更合适的内容替换document.write
- 在我的情况下,如何进行http请求
- //而不是在src=“”上使用http://"属性
- jQuery AJAX write to XML
- 我无法使用angularJs($http)访问服务器
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 如何将PHP get查询转换为Meteor's HTTP.get()
- 角度异步http自动完成
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 角度http服务器页面刷新404s
- http.listen()在运行时接受终端命令
- IIS动态HTTP响应标头
- write HTML in JavaScript
- spring和angularJS(我得到了类似HTTP状态404的错误)
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- Typescript angularjs$http获取响应类型(避免使用<any>)
- 如何从HTTP上下文对象中获取Post数据
- 节点如何将文件传递到http.write方法