Tag: http

如何检测客户端closures连接期间通过http在pipe道stream节点?

我使用expressjs(nodejs)应用程序将数据从服务器传输到客户端。 我做这样的事情; // let contentType and filename be correctly defined in context function(req,res){ res.setHeader('Content-Type',contentType); res.setHeader('Content-Disposition','attachment; filename='+filename); require('fs').createReadStream('/path/file').pipe(res); } 我想知道客户端何时无法下载文件,但我不知道如何继续。

节点JS + DIME – 在POST中发送二进制数据

有一个1740字节长的文件,它的内容被读到一个Buffer res 。 res.length是1740, res.toString('binary', 0, res.length).length也是1740。 我使用request库发送POST请求 request.post({ url: endpoint, headers: headers, body: res.toString('binary', 0, res.length) }, callback); 请求转到gSOAP服务器。 通过在服务器上debugging几个小时来发送请求,我们发现:服务器发出的请求长度为1753字节,有些字符被转换。 特别是,hexB7变为C2 B7 ,所以按照此处所述进行转换: http : //www.fileformat.info/info/unicode/char/b7/index.htm 我尝试设置encoding: 'binary'和encoding: null请求参数,相同的结果(与encoding : null我只收到错误消息作为缓冲区,但就是这样)。 我尝试使用https库和pipe道strean到请求,相同的结果。 最好的问候,亚历山大 编辑 目前,我发现了一个解决方法,用cURL发送一个来自cli的请求–data-binary "@file_to_which_i_dumped_the_request"'这样做。 但是应用程序和nodejs服务器本身是在一个安装程序中发布的,所以我们必须在用户的机器上安装cURL,这是可以接受的,但不是最好的select。 那么有没有办法发送一个二进制POST body与nodejs? 谢谢。

Poco :: Net :: HTTPClientSession json数据内容types未收到

所以我正在开发一个服务器端Nodejs / expressjs应用程序和一个客户端c ++ / Poco应用程序。 我已经设法创build一个服务器托pipe和客户端之间的会话。 但是,任何时候我尝试发送我的JSON负载,express.js显示req.body为空。 Google除了Content-Type可能没有被正确传输外,并没有透露太多的东西。 我确实明确,但显然我错过了一步。 客户端 void upload(std::list<std::string>& args) { if (args.size() == 0 || args.front() == "–help") { help("upload"); return; } std::string repo = args.front(); args.pop_front(); std::string name, language; auto depends = getDepends(name, language); // start making the poco json object here Poco::JSON::Object obj; obj.set("name", name); obj.set("url", repo); Poco::URI […]

当URL在浏览器中工作时,可能会导致“连接ETIMEDOUT”错误?

我用NodeJS训练myslef并尝试了一个简单的GET调用。 这是我的代码: var http = require('http'); var options = { host: 'www.boardgamegeek.com', path: '/xmlapi/boardgame/1?stats=1', method: 'GET' } var request = http.request(options, function (response) { var str = "" response.on('data', function (data) { str += data; }); response.on('end', function () { console.log(str); }); }); request.on('error', function (e) { console.log('Problem with request: ' + e.message); }); request.end(); […]

在NodeJS中结束之前closuresHttp响应stream

我正在使用nodejs中的请求模块发出请求,我正在收到stream式响应。 这个响应stream被传送到csvparsing器并将logging填充到一个数组中。 一旦我得到预设的logging数,我想结束csvparsing并closures响应stream。 如何正确清理响应stream 这是伪代码 var stream = request.get(url); stream.pipe(csvParser); var count = 15; csvParser.on("readable",function(){ while(record = csvParser.read()){ if(records.length<count){ records.push(record); } else { csvParser.end(); //stream.close(); //stream.unpipe(); // stream.destroy(); } } }); csvParser.on("error",function(err){ console.log("Error",err.message); }) csvParser.on("finish",function(){ //console.log("records",records); console.log("done"); }) 当我尝试stream.close(),这是说未定义的方法。 什么是清理它的正确方法..?

如何获得Express来返回刚刚在MongoDB中删除的对象

随意让我知道这是不是一个普遍的做法 – 我是一个相当新的程序员 – 但我想我以前见过的API,当你提交一个DELETE请求到资源(/ todo / 1234 ),一些服务器将返回刚刚在响应中删除的对象。 那是一件事吗? 如果是这样,我会有兴趣学习如何做到这一点。 这是我有: .delete(function (req, res) { Todo.findById(req.params.todoId).remove(function (err) { if (err) res.status(500).send(err); res.send("Todo item successfully deleted"); }); }); 此代码确实删除了该项目,但我想返回在响应中删除的项目而不是string消息。 如果这是一个正常/好的事情要做。 如果因为某种原因不正常或者不好,请告诉我为什么,我会继续前进。 或者也许有一个更常见的方法。 这是我在RFC 7231文档中find的内容: 如果一个DELETE方法被成功应用,原始服务器应该发送一个202(接受的)状态码,如果这个动作可能成功但是还没有被执行,一个204(无内容)状态码,如果这个动作已经被执行,信息将被提供,或者如果动作已经被执行并且响应消息包括描述状态的表示,则提供200(OK)状态码。 我很难解释200响应是什么意思 – 发送一个string消息( Success! )还是一个包含消息属性( {message: "Success!"} )的对象是否只有犹太人? 或者你可以在那里做任何你想做的事情? Express使用Mongoose的最佳做法是什么? 在此先感谢您的帮助,并为HTTP我的noobness抱歉。

q-io:如何使用Promises读取response.body JSON对象?

我需要从一台服务器到另一台服务器发出一个http请求。 处理这个请求的服务器将返回一个JSON数组对象: app.get('/array', function (req, res) { console.log('GET request received!'); var response_array = [ { value: 1234 }, { value: 1234 }, { value: 55 } ]; res.send(response_array); }); 我正在使用q-io将http请求发送到GET方法/array并获取数组: var _getArray = function(externalUrl) { var request = { method: "GET", url: externalUrl }; return HTTP.request(request) .then(function(response) { // I need to return the Array […]

跟踪multer nodejs中file upload的进度

如何跟踪上传到NodeJs服务器的文件的进度。我使用服务器端的multer来上传文件。 ? 我是否需要向客户端发送某种信息,以便客户端获得上传进度,或者这是在内部完成的,客户端可以跟踪其上的进度。 以下是我用来上传文件的代码: var multer = require('multer'); app.use(multer({dest:'./tmp',limits: {fileSize: 4*1024*1024}}).single('upload')); router.post('/upload',function(req,res){ console.log(req.file); });

将graphics魔术输出的图像转换为无base64编码的响应

我有一个节点服务器,而不是存储裁剪图像,我想裁剪他们回应一个AJAX调用,并发送到客户端的方式。 我正在存储什么裁剪的信息,以及如何裁剪cookies和身体。 在服务器上裁剪,用base64编码,然后发回给用户。 这是我的代码看起来像 res.set('Content-Type', 'image/jpeg'); gm(request(body.URL)) .crop(req.cookies[name+"Width"],req.cookies[name+"Height"],req.cookies[name+"X"],req.cookies[name+"Y"]) .stream(function streamOut (err, stdout, stderr) { if (err) return next(err); stdout.pipe(base64encode()).pipe(res); stdout.on('error', next); }); 这工作,但我不喜欢它。 我只能通过在base64中编码来实现这个function,但在客户端,这似乎是很慢的解码这个图像。 我宁愿直接发送图像,但我无法得到这个工作。 在不对其进行解码的情况下翻页,导致服务器产生乱码响应。 有一个更好的方法吗? 还是未保存的图像必须编码才能发送?

Axios与node.js – ReferenceError:XMLHttpRequest未定义

我从一个简单configuration的axios实例触发一个GET请求: var Axios = axios.create({ baseURL: myBaseUrl, headers: {'content-type': 'application/json'} }); Axios.get(url) 并得到以下错误: ReferenceError: XMLHttpRequest is not defined at dispatchXhrRequest (C:\…\node_modules\axios\dist\axios.js:804:24) at xhrAdapter (C:\…\node_modules\axios\dist\axios.js:796:11) at process._tickCallback (internal/process/next_tick.js:103:7) at Function.Module.runMain (module.js:577:11) at startup (node.js:160:18) at node.js:456:3 据我的理解(并根据文档 ),axios应该在web浏览器和node.js上工作。 我错过了什么? 版本: node – 6.2.1 axios – 0.13.1