Tag: 快速

Express.js – 如何将base64string下载为PDF文件?

我有PDF文件编码为base64string。 如何以.pdf格式将此string下载到浏览器中? 我已经试过了: res.set('Content-Disposition', 'attachment; filename="filename.pdf"'); res.set('Content-Type', 'application/pdf'); res.write(fileBase64String, 'base64');

控制会话以express和连接中间件开始

有一种方法来控制会话何时开始连接的会话中间件? 例如,如果我有快速应用程序configuration: var app = express(); app.configure(function(){ app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('secret')); app.use(express.session({ store:sessionStore, … })); }); 然后在每个请求中,如果没有给出会话cookie,则启动一个会话。 如果我只想在用户通过身份validation时才开始会话,该怎么办? 例如,说我有两个路线/protected和/login 。 如果有人点击/protected没有会话cookie,中间件将不会启动一个新的会话。 ( req.session为null ) 如果有人点击/protected会话cookie,中间件将检查 cookie是否存在匹配的活动会话并设置req.session ,但不会启动新的会话。 ( req.session可以有一个值或为null ) 如果有人用正确的参数点击/login ,则显式启动一个会话,然后只设置一个cookie。 开始会议的唯一方法应该是明确的: app.post('/login', function(req, res, next) { // connect to database and validate user… db.authenticate( req.body.user, req.body.pass, function(allow) { if (allow) { // START SESSION […]

node.js,以同步的方式在循环中一个接一个地执行mysql查询

在我的node.js中,表示应用程序,我用superagent中间件做了一个ajax调用。 该调用通过相当多的数据库查询使用node-mysql中间件获取复杂数组中的数据库数据。 在粘贴代码之前,我试图用言语解释我正在尝试做什么,尽pipe代码足以说明在第一个callback中的所有asynchronous事件应该以同步的方式完成。 说明: 在第一个查询的callback中,执行for循环多次运行第二个查询,在每个循环之后,只有在第二个查询的callback完成后才会调用下一个循环。 下一个代码行也是一样的。 码: 但是 ,如果你愿意的话,你可以跳过 for循环的内部(标注在注释中)来使事情变得简单和简单。 conn.query("SELECT * FROM `super_cats`",function(error, results, fields) { if(error){console.log("erro while fetching products for homepage "+ error);} for(var i in results) { // FIRST FOR LOOP INSIDE THE FIRST QUERY CALLBACK /*Innards of for loop starts*/ var elem = new Object(); var supcat_id=results[i].id; elem.super_id =supcat_id; elem.cats=new Array(); […]

从express 3.x升级到express 4.x – Mongo会话存储

我正在从express 3.x迁移到express 4.x 我有问题find与新session中间件一起使用的mongo会话存储 。 先前: express 3.x已经connect作为一个依赖,这反过来与捆绑的session中间件。 为了在mongo数据库中保留会话,事实上的中间件是connect-mongo 。 新的世界秩序: 现在express 4.x , connect不再是一个依赖项。 因此,几乎所有先前捆绑的中间件已经被分解为单独的中间件,如上面列出的session 。 session需要一个store ,但由于connect-mongo依赖于connect ,是不兼容的express 4.x 题: 我无法find迁移到express 4.x时使用哪个mongo会话存储的信息。 有什么build议么?

asynchronous初始化express.js(或类似的)应用程序

考虑一个例子:我有以下express.js应用程序(请参阅下面的代码片段)。 我想有一个持久连接到数据库,并且一个持久连接到我自己的服务(这需要asynchronous调用来启动)在整个应用程序生命周期。 还有几个入口点,即不仅可以通过HTTP协议访问我的应用程序。 当然,我想避免服务初始化代码重复,并可能有几个如同步初始化服务。 /* app.js */ var app = require('express')(); // set views, use routes, etc. var db = require('monk/mongoose/etc')(…); // happily, usually it's a sync operation var myService = require('./myService'); // however, it's possible to have several such services myService.init(function(err, result) { // only here an initialization process is finished! }); module.exports.app = […]

Node.js,Express,MongoDB和stream

我正在寻找通过Node.js服务器层将数据从MongoDBstream式传输到Web客户端的最佳方式。 我正在请求每个查询大约10MB的数据,并且查询已经在day_timestamp上编制索引。 请注意, 我已经阅读了这篇文章。 我正在使用的唯一的Mongo相关模块如下(我需要别人来实现我的目标?): MongoClient = require('mongodb').MongoClient; 目前我的代码看起来像这样: MongoClient.connect('mongodb://host:port/myDatabase', function(err, db) { if(err) throw err; console.log("Connected to Database"); // Server picks up URL requests made by browser app.get("/:type/:category/:resolution/:from/:to/", function (req, res){ var start = moment(); var type = String(req.params.type) ,category = String(req.params.category) ,resolution = String(req.params.resolution) ,from = moment.utc(req.params.from).toDate() ,to = moment.utc(req.params.to).toDate() ,options = { […]

节点快速连接 – 会话pipe理

我已经为ConnectJS的ArangoDB写了一个会话存储驱动程序。 这是工作,虽然仍然非常阿尔法,但我有几个问题。 具有“假”过期属性的第一次会话仅在用户代理期间保持不变。 我注意到,当浏览器窗口closures时,不会调用session.destroy()。 这导致在商店中留下“被遗弃”的会话。 我怎样才能有效地清除这些? 有没有办法按计划search和销毁废弃的会话? 其次,我已经实施了本会话商店的最低要求,如本页所述: http : //www.senchalabs.org/connect/session.html (接近底部) 那会得到,设置和摧毁。 另外两个build议的方法是长度和清晰。 这些方法究竟应该做什么? 我假设长度返回一个会话已经活跃的时间长度? “清除”与“销毁”有何不同? 谢谢!

在Node.js中用fs.createReadStreamreplacefs.readFile

我有从目录中读取图像并将其发送到index.html的代码。 我想用fs.createReadStreamreplacefs.readFile,但我不知道如何实现这一点,因为我找不到一个很好的例子。 这是我得到(index.js) var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); var fs = require('fs'); http.listen(3000, function () { console.log('listening on *:3000'); }); app.get('/', function (req, res) { res.sendFile(__dirname + '/public/views/index.html'); }); io.on('connection', function (socket) { fs.readFile(__dirname + '/public/images/image.png', function (err, buf){ socket.emit('image', { image: true, buffer: buf.toString('base64') }); }); }); […]

如何通过sudo在生产模式下运行node.js Express?

我正在使用节点版本为.0.6.5的npm包express版本2.5.2。 我似乎在Debian 4.4.5上运行bash版本4.1.5。 我试图在生产模式下运行我的服务器,但它仍然在开发模式下运行。 我在我的bash shell中运行这些命令: $ export NODE_ENV=production $ echo $NODE_ENV production $ sudo echo $NODE_ENV production $ sudo node bootstrap.js 我在bootstrap.js里有这个代码: var bootstrap_app = module.exports = express.createServer(); //… console.log(bootstrap_app.settings.env); 这里是我看到打印标准: development 这是我的用法,或我的系统的问题? 编辑:感谢ThiefMaster他正确地确定这个问题源于我的运行节点作为根。 ThiefMasterbuild议使用iptables从端口80转发到非特权端口,但是我的系统给了我一个错误。 将此讨论移到superuser.com或serverfault.com(请点击链接)

快递+请求中途更改标题

我使用express作为我的服务器,并请求从上游框中检索内容。 我有这个漂亮简单的函数来将数据从上游stream传输到客户端: function(req, res){ request("http://example.com").pipe(res); } 上游方框正在返回caching头Cache-Control: no-cache我想修改Cache-Control: no-cache ,以便Nginx(反向代理)可以caching响应。 我应该在哪里放res.header('Cache-Control', 60); ? 我试过了: function(req, res){ var retrieve = request("http://example.com"); retrieve.on('data', function(chunk){ if(res.get('Cache-Control') != 60) res.header('Cache-Control', 60); }); retrieve.pipe(res); } 但是这会引发Error: Can't set headers after they are sent错误Error: Can't set headers after they are sent 。 是否有一个侦听器在发送头文件时触发,但是在writeHeader()之前?