我想在后端做连载工作。我想选择geo_unit并做另一项工作,向客户机写入响应。我阅读了http://nodejs.org/docs/v0.4.7/api/events.html#事件和错误:发送到客户端后不能设置头
当我缓慢地发送请求,例如每3秒发送1个请求时,所有的工作都很好。
但当我快速发送请求时,它就不起作用了。并得到以下错误。我是否在全球范围内定义某件事?
Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (http.js:691:11) at ServerResponse.res.setHeader (E:\git\xxxxxx-nodejs\node_modules\express\node_modules\connect\lib\patch.js:63:22) at ServerResponse.res.set.res.header (E:\git\xxxxxx-nodejs\node_modules\express\lib\response.js:527:10) at ServerResponse.res.json (E:\git\xxxxxx-nodejs\node_modules\express\lib\response.js:194:36) at EventEmitter. (E:\git\xxxxxx-nodejs\routes\api_scrapper.js:17:17) at EventEmitter.emit (events.js:117:20) at ScrapperAPI.externalLocationCallback (E:\git\xxxxxx-nodejs\routes\api_scrapper.js:27:20) at Query._callback (E:\git\xxxxxx-nodejs\routes\api_scrapper.js:51:21) at Query.Sequence.end (E:\git\xxxxxx-nodejs\node_modules\mysql\lib\protocol\sequences\Sequence.js:78:24) at Query._handleFinalResultPacket (E:\git\xxxxxx-nodejs\node_modules\mysql\lib\protocol\sequences\Query.js:143:8)
我正在使用以下代码:
var express = require('express'), http = require('http'), path = require('path'); var app = module.exports = express(); var server = require('http').createServer(app); var io = require('socket.io').listen(server); var request = require('request'); var cheerio = require('cheerio'); var mysql = require('mysql'); var pool = mysql.createPool({ host : 'localhost', user : 'root', database :'evevgez_development', password : 'root', // socketPath : '/var/run/mysqld/mysqld.sock' }); var sahibinden = require('./routes/my_scrapper').newScrapperAPI(pool); app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.static(path.join(__dirname, 'public'))); app.use(app.router); app.use(express.errorHandler()); app.get('/node1', sahibinden.scrap); server.listen(app.get('port'), function () { console.log('Express server listening on port ' + app.get('port')); });
myModule就是这样的
var request = require('request'); var cheerio = require('cheerio'); var iconv = require('iconv-lite'); var EventEmitter = require('events').EventEmitter; var emitter= new EventEmitter(); function ScrapperAPI(pool) { this.scrap = function (req, res,next) { var query = req.query; console.log('req.params:'+req.query); console.log('IL_ID:'+query.il_id); emitter.emit('location',query); emitter.on('success',function(rows){ res.json(rows); }); }; emitter.on('location',function(query){ console.log('quey1:'+query); getExternalLocation(query ) }); var getExternalLocation = function (query ) { try { pool.getConnection(function (err, connection) { console.log('query:'+query); connection.query("select * from external_geo_units where geo_unit_id = ? ",query.il_id, function (err, rows) { console.log(err); if (err) callback(err); emitter.emit('success',rows); connection.release(); }); }); } catch (e) { console.log(e); } }; } module.exports.newScrapperAPI = function (pool) { return new ScrapperAPI(pool); }
以这种方式使用EventEmitter并不是您正在做的事情的最佳解决方案,因为您只是在请求中使用它来进行数据库调用并返回一些行--通过回调可以更容易和简单地完成这件事。
但是,如果要保留全局EventEmitter,则必须将emitter.on('success'
中的on
和emitter.on('location'
中的once
切换为once
,以确保每个请求只调用它们一次。
问题内容: 我试图在节点中使用express来获得“ imdb评级”,我正在努力。 电影.json 结果 退货 但 //不返回8.4,只是崩溃的节点 和 //返回David和Goliath //返回Miles Sloman 我要去哪里错了? 问题答案: 根据文档: body参数可以是Buffer对象,String,对象或Array。 您不能自己发送号码。 尝试将数字转换为字符串 或将其作为对象值发
问题内容: 有一个in ,但是我似乎无法使express static选项起作用。我删除并完成了操作,但仍然无法正常工作。我刚收到404错误。 我添加了一个块以确保express正常运行,但是我仍然无法请求静态文件。 问题答案: 对我来说很好。 app.js 自述文件
问题内容: 如何使用与以下代码等效的node.js发出Http请求: 问题答案: 使用http客户端。 遵循以下原则:
我有两个节点js应用程序,一个发送post请求,如下所示: 另一个是试图用表达式和正文解析器来处理它: 问题是在接收端我无法检索我正在寻找的json数据。有人知道我错过了什么吗?
MVC 是很多应用开发时都会采用的一种「架构模式」,会把一个应用分成 Model-View-Controller,每一部分各自负责: Model - 应用的功能实现、数据库相关操作等 Controller - 负责转发请求,对请求进行处理等 View - 应用的界面部分,与用户的交互等 同样的,我们在开发Express应用的时候也可以采取这样的清晰明了的开发模式,所以我们可以先构建好应用的文件目录
Express 堪称是 Node.js 领域最为流行的Web开发框架,由著名的开发者 TJ 开发,现在已经衍生到4.x版本。 Express的”Hello World” 以下是一个简单的使用 Express 作为服务器的代码,通过 res.send() 方法将 Hello World 字符串作为 Response 返回: var express = require('express'); var
在第三章中,我们将会学习如何使用最为流行的 Node.js Web开发框架 — Epxress 开发一个小型的站点,并包含了如何部署到服务器的章节。 这部分的内容曾发布在我的个人博客上:Express开发Web应用,Express开发Web应用2。本章中将试图以更为清晰的语言讲解整个开发、部署的过程。 整个网站的代码库开源于:github.com/SFantasy/Riki。
我已经掌握了XPath的基本知识,但在确定以下内容是否可以在使用XPath的C代码中实现时遇到了一些困难(或者我是否需要将其转移到其他代码中,正如我目前所做的那样)。 我有一个XML文档,它由以下结构组成: 其中有多个设置参数值。现在我需要做的只是检索那些包含name属性某些值的setParameter节点。我可能有这些值的可能匹配列表,但它们不会是完全匹配,它们将是节点的name属性必须包含的值