Tag: express

用mocha设置/拆卸express.js应用程序

我试图创build一个独立的testing套件使用摩卡,在完美的世界将启动我的express.js应用程序,使用僵尸来呈现一个页面,检查一堆东西,然后拆卸/杀死express.js应用程序。 有没有一个简单/最好的方法来做到这一点? NB。 我可以在运行testing之前运行快速应用程序服务器,但是如果你不打算修复它们,牦牛有什么好处。

如何获得日食解释.ejs文件为.html?

我最近开始了一个节点项目,我使用的两个模块是express和EJS。 但默认情况下,我通常使用eclipse作为我的IDE,它适用于java和体面的html和javascript。 但我遇到的一个问题是.ejs文件我没有标记颜色编码,或任何forms的代码完成。 它基本上只是一个普通的文件。 有没有人知道我怎么能得到日食解释.ejs文件为.html文件? 我觉得这是非常相似的,除了偶尔的embedded标签。 或者更适合于node.js / html / ejs开发的IDE的build议。 谢谢!

Node.js:configuration和路由在一个不同的文件

我开始一个新的Node.js应用程序,这一次,我试图正确组织代码,而不是在同一个文件中的一切。 我只在server.coffee有一个简单的设置: express = require 'express' app = module.exports = express.createServer() ## CONFIGURATION ## app.configure () -> app.set 'views', __dirname + '/views' app.set 'view engine', 'jade' app.use express.bodyParser() app.use express.logger('dev') app.use express.profiler() app.use express.methodOverride() app.use app.router app.use express.static(__dirname + '/public') app.configure 'development', () -> app.use express.errorHandler({dumpExceptions: true, showStack: true}) app.configure 'production', () -> app.use express.errorHandler() […]

Memory.orem.MemoryStore不返回会话?

设置会话并在php中使用它们非常简单。 但是我的网站需要处理websocket。 我面临着在node.js中设置会话的问题。 我可以轻松地推送数据,而不使用会话,它可以正常工作,但是当打开多个选项卡时,会创build新的socket.id,并且之前打开的选项卡将无法正常工作。 所以我一直在研究会议,并有问题访问会话存储,其logging会话不抓住。 我已经尝试与session.load以及但没有运气 我如何获取会话对象,并以打开其他选项卡不会影响function的方式使用它,并将所有选项卡上的数据从服务器推送到客户端? var express=require('express'); var http = require('http'); var io = require('socket.io'); var cookie = require("cookie"); var connect = require("connect"), MemoryStore = express.session.MemoryStore, sessionStore = new MemoryStore(); var app = express(); app.configure(function () { app.use(express.cookieParser()); app.use(express.session({store: sessionStore , secret: 'secret' , key: 'express.sid'})); app.use(function (req, res) { res.end('<h2>Hello, your session […]

我怎样才能构build我的快速应用程序,我只需要打开一个mongodb连接?

注意:请在回答之前阅读本文的编辑部分,这可能会节省您的时间并回答我的一个问题。 我遇到的问题是非常简单的,但我是相当新的整体,我有问题搞清楚如何在节点/快速应用程序中正确实施MongoDB数据库连接。 我正在使用Express 3.x,并将我的应用程序布局作为快速作者提供的此项目的基础: https : //github.com/visionmedia/express/tree/master/examples/blog 我对创build博客没有兴趣,但是应用程序的结构看起来相当不错。 路线是分开的,一切都很好地组织。 我的问题是我可能有5-6个不同的路由js文件,每个路由js文件可能有1到15个路由之间的任何地方; 这些路由1或15可能要访问数据库。 所以我的问题是这似乎是一个非常可怕的想法做一个db.open(…)每一次我想查询数据库。 在这一点上我应该提到我正在使用本地mongo-db驱动程序(npm install mongodb)。 我还需要包含这样的文件: http : //pastebin.com/VzFsPyax …在所有这些路线文件和我所有的模型文件。 然后,我也打了几十个打开的连接数十打交道。 有没有办法以这种方式构build我的应用程序,我只能build立一个连接,并在会话期间保持打开状态(如果有新的请求,每个请求都会变得不好)? 如果是这样,我该怎么做? 如果您知道答案,请使用tj的博客应用程序(本文前面链接的应用程序)结构作为基础指南发布代码示例。 基本上有一种方式,路线和模型可以使用数据库,而在分开的文件,而不是数据库开放代码。 谢谢。 编辑 我在解决我的一个问题上取得了一些进展。 如果你看看tj的博客例子,他就像这样在app.js中初始化他的路线: require('./routes/site')(app); require('./routes/post')(app); 而在路线js文件中,它是这样开始的: module.exports = function(app){ 我今天早些时候偶然发现一个项目,我看到有人在modules.exports调用 – >函数(app,db)中传递了两个variables。 然后想出哇,这是否容易,我是否需要调整我的路线(app,db)呢? 是的,似乎是这样。 所以现在问题的第一部分已经解决了。 我不必在每个路由文件中都要求连接样板文件的mongo.js文件。 同时,它足够灵活,我可以决定select哪个path文件传递数据库引用。 这是标准的,没有不好的权利? 问题的第二部分(不幸的是重要的一部分)依然存在。 我怎么能绕过每一个查询做一个db.open(…),最好每个会话只做一次连接?

NodeJS + MongoDB:使用findOne()从集合中获取数据

我有一个收集“公司”与几个对象。 每个对象都有“_id”参数。 我试图从数据库中获取这个参数: app.get('/companies/:id',function(req,res){ db.collection("companies",function(err,collection){ console.log(req.params.id); collection.findOne({_id: req.params.id},function(err, doc) { if (doc){ console.log(doc._id); } else { console.log('no data for this company'); } }); }); }); 所以,我要求公司/ 4fcfd7f246e1464d05000001(4fcfd7f246e1464d05000001是我需要的对象的_id-parma)和findOne什么也没有返回,那'为什么console.log('这个公司没有数据'); 执行。 我绝对相信我有一个对象_id =“4fcfd7f246e1464d05000001”。 我做错了什么? 谢谢! 不过,我刚刚注意到,id不是一个典型的string字段。 这就是mViewer显示的内容: "_id": { "$oid": "4fcfd7f246e1464d05000001" }, 似乎有点奇怪…

ExpressJS&Websocket&会话共享

我试图做一个基于Node.js的聊天应用程序。 我想强制websocket服务器(ws库)使用ExpressJS会话系统。 不幸的是,我卡住了。 用于获取会话数据的MemoryStore散列与Cookie中的会话ID不同。 有人能解释我做错了什么吗? Websocket服务器代码部分: module.exports = function(server, clients, express, store) { server.on('connection', function(websocket) { var username; function broadcast(msg, from) {…} function handleMessage(msg) {…} express.cookieParser()(websocket.upgradeReq, null, function(err) { var sessionID = websocket.upgradeReq.cookies['sid']; //I see same value in Firebug console.log(sessionID); //Shows all hashes in store //They're shorter than sessionID! Why? for(var i in store.sessions) console.log(i); […]

Node.js在HTTP 80端口上侦听EACCES错误(权限被拒绝)

Node.js在http端口80(默认端口)上运行时抛出以下错误: – Error: EACCES, Permission denied at Server._doListen (net.js:1062:5) at net.js:1033:14 at Object.lookup (dns.js:132:45) at Server.listen (net.js:1027:20) at [object Context]:1:3 at Interface.<anonymous> (repl.js:150:22) at Interface.emit (events.js:42:17) at Interface._onLine (readline.js:132:10) at Interface._line (readline.js:387:8) at Interface._ttyWrite (readline.js:564:14) 我想出了这个节点需要有root权限。 传统上,我们避免在正常情况下给予root权限。 在端口80(或端口<1024)上使用它的最佳实践是什么? 这个链接有相同的问题,但它只有一个答案,即PREROUTING。 而我的解决scheme也提供其他方式。 我写这个是为了在一个位置有所有的答案,因为我必须去彻底的其他资源比PREROUTING。 为什么不是所有的答案在一个地方分享知识

如何在node.js中redirect

我有目录之间redirect的一些问题,问题是我可以设法redirect到另一个文件在不同的目录。 我的目录结构如下所示: -views -add_user.jade -routes -index.js 我尝试redirect从index.js 添加 _ user.jade ,你会怎么做 res.redirect('???'); 如果index.js与视图在同一个目录中,则下面的代码工作 -index.js -views -add_user.jade res.redirect('./add_users');

使用passport.js和express.js(node.js)创build安全的oauth API

我想我有一个特定的问题,除非我没有以正确的方式做事。 我有一个双方的应用程序,一个客户端(html网站),和一个API(使用express + mongodb构build)。 该API将需要安全访问。 他们都在不同的领域,现在让我们说我的网站是在domain.com上,我的API是在api.com:3000。 我已经添加了护照从Github获取访问令牌,因为我使用他们的数据创build了我的用户,所以我可以基本上有一个“用Githublogin”。 我目前的过程是: 1)客户端(站点),在API上打开一个popup窗口 window.open("http://api.com:3000/oauth") 2)快递服务器,启动护照stream程: app.get('/oauth', passport.authenticate('github'), function(req, res) { }); 对于这个策略,我使用了这个代码 。 3)我将callbackredirect到一个url,closurespopup窗口(JavaScript与window.close()): app.get('/oauth/callback', passport.authenticate('github', { failureRedirect: '/' }), function(req, res) { res.redirect('/auth_close'); }); 在这一点上,一切都很好,我现在login在API中。 我的问题是如何将数据返回给客户端,因为客户端还不了解accessToken,用户或用户ID。 所以,从客户端(打开popup窗口的网站),我尝试了不同的方法: 从popup窗口中获取值:由于redirect而不工作,我失去了popup式JavaScript信息的轨道 调用我的API来获取会话中的“当前用户”,如http://api.com:3000/current另外一个请求,并不理想,但是这个工作。 但是,我仍然有一个问题。 如果我从浏览器到达它,这个/当前url正在返回用户,因为浏览器在头部请求中发送快速会话cookie: Cookie:connect.sid=s%3AmDrM5MRA34UuNZqiL%2BV7TMv6.Paw6O%2BtnxQRo0vYNKrher026CIAnNsHn4OJdptb8KqE 问题是我需要从jquery或类似的请求,这是失败的地方,因为会议不发送。 所以用户不会被返回: app.get('/current', function() { // PROBLEM HERE, req.user is undefined with ajax calls because of […]