Tag: 表示

Express路由与AngularJS路由冲突。

在Express中有以下性质的路由代码: app.get("/profile/:param", function (req, res) 这与AngularJS提供的path一致。 例如,当载入nature /profile/someparam#view1的Angular视图时,新的URL模式被Express(它假定它是/profile/<someparam>types) /profile/<someparam> 。 这导致与view1关联的控制器被无限调用,从而导致页面崩溃。 我如何解决这个问题?

TypeError:undefined不是node.js / express.js中的函数

我得到了以下错误:TypeError:undefined不是一个函数 callback(null,array_reply,threadResults); 这部分看起来不好,但我不知道为什么。 我需要你的帮助。 谢谢 async.waterfall([ function (callback) { Model.find() .limit(10) .sort({pushed_date: 'desc'}) .exec( function (err, results) { if (err) { log('Error: ' + err.message); callback(err); return; } var array_reply = new Array(); async.forEachSeries(results, function (result, callback) { var reply = result.replies[result.replies_count]; array_reply.push(reply); },callback); callback(null, array_reply); }); }, function (array_reply, callback) { Model.find() .limit(10) .sort( […]

express3-handlebars和18next-node – 基于页面的国际化?

我的第一个问题 – 请容易。 我使用express,express3-handlebars和i18next-node与node.js 该计划是根据哪个视图(即哪个句柄文件)当前正在服务于不同的翻译命名空间。 因此,如果我们查看名为ie(.hbs)的页面,则i18next将在名为ie(.json)的相关语言中查找。 这使得翻译的组织和协调更容易。 这就是我目前的做法:首先,我将当前页面发送到handlebars模板进行渲染(即使这似乎是不必要的 – handlebars不会自动暴露它渲染的文件): res.render( url_base_path, { layout: ("sub"), title: title, currentpage: url_base_path } ); 然后我在当前页面的命名空间中访问要翻译的variables“greeting”,就像{{t "greeting" page=currentpage }} – 令人讨厌的是每个页面上有10个variables。 不要重复自己,有人吗? 't'是在express3-handlebars create()函数中定义的,如下所示helpers: { t: t } 翻译function看起来像这样 var t = function (i18next_key, options) { var page, result; page = options.hash.page; result = i18next.t(page + ":" + i18next_key); […]

expressjs – 无法将我的手写笔样式表加载到jade html页面

在我的快速应用程序中,我正在尝试从样式模块引擎加载样式属性。 但是我根本无法加载我的风格。 这里是我的文件夹结构: myNodeApp -node_modules -styles -style.css -style.styl -views -index.jade 这里是我的app.js代码,我打电话使用手写笔。 var http = require("http"), express = require("express"), stylus = require("stylus"), app = express(); app.set('view engine', 'jade'); app.set('views', './views'); app.use(stylus.middleware({ debug : true, src : __dirname + '/views', dest : __dirname + '/styles' })); app.use(express.static(__dirname + '/styles')); app.use(express.static(__dirname + '/css')); app.get('/', function (req, res, next){ […]

如何在centos 6.4 virtualbox客户端上用express来设置和configurationnode.js到nginx反向代理?

我正在使用VirtualBox 4.3.4在我的Windows 8.1系统上创build一个开发虚拟机,并安装了CentOS 6.4作为我的VMServer。 我安装NginX和Node.js没有问题。 在pipe理知识less的情况下,我删除了/etc/sysconfig/iptables的内容,允许所有连接仅用于开发目的(稍后将进行更改)。 Nginx工作正常,在我的Windows主机上,并指向浏览器http://192.168.1.20显示“欢迎来到EPEL的nginx!” 页面正在工作。 validation我的node.js应用程序工作正常,我通过运行在我的VMServer上创build了一个节点应用程序 [~]# express node_nginx_practice [~]# cd node_nginx_practice && npm install [~]# node app 然后,在我的Windows主机上,将URL指向http://192.168.1.20:3000 default”页面运行时没有任何问题。 问题是我如何设置和configuration节点应用服务于nginx反向代理? 例如: http://192.168.1.20 //will point to Express default page : http://192.168.1.20 //will point to Express default page 我尝试在/etc/nginx/nginx.conf按照一些教程设置/etc/nginx/nginx.conf的nginxconfiguration, /etc/nginx/nginx.conf没有运气,url仍指向Nginx“欢迎使用EPEL上的nginx!” 页。 这是我的nginx.conf # For more information on configuration, see: # * Official English […]

NodeJS CouchDB长轮询崩溃

当然,我有一个通过NodeJS上的ExpressJS发布的web应用程序。 它使用CouchDB作为数据源。 我实现了长轮询以保持应用程序在所有用户之间始终保持同步。 要做到这一点,我使用以下逻辑: 用户login到应用程序,并通过Express路线向Node发起初始的长轮询请求。 节点轮stream向CouchDB发出长轮询请求。 当Couch更新时,它响应来自Node的请求。 最后Node响应浏览器。 简单。 但是,发生的事情是,当我刷新浏览器时, 每五次刷新就会冻结一次 。 咦? 非常奇怪。 但是,即使在我的testing环境中,我也可以一遍又一遍地重现它。 每五次刷新一次,冻结Node并导致应用程序冻结。 重启节点解决了这个问题。 拉了很多头发后,我想通过改变这个问题来解决它: app.get('/_changes/:since*', security, routes.changes); 对此: app.get('/_changes/:since*', security, function () { routes.changes }); 然而,经过进一步的testing,这只是没有运行routes.changes。 所以没有实际解决scheme 任何想法为什么长期投票CouchDb从Node会做这样一个奇怪的事情? 在第五次刷新,我可以在我的路由代码的第一行节点中有一个断点,它永远不会被击中。 但是,在浏览器中,我可以断开对长时间轮询的节点的请求,并且它似乎熄灭。 这就像Node由于某种原因不接受连接 我应该以不同的方式接近从Node到CouchDB的长轮询吗? 我正在使用feed = longpoll,我应该做feed还是连续的? 如果我将couchdb中的changes_timeout调低到5秒,它就不能解决问题,但是它可以更容易地处理,因为冻结只会持续5秒钟。 所以这似乎表明节点不能处理有几个待处理的请求。 也许我会尝试一个连续的饲料,看看会发生什么。 self.getChanges = function(since){ 浏览器: $.ajax({ url: "/_changes/" + since, type: "GET", dataType: "json", […]

通过Socket.io HTML5video/audio到Nodejs,但扭曲 – FFMPEG

我正在写这个非常简单的“skype克隆”。 我尝试了各种其他语言,python和分层Node.js与meteor,WebRTC,但Node.js + socket.io似乎工作最好,最干净,但我已经达到了路障,我无法得到这一切正常工作。 我有两个问题,1,我想我从HTML5 getUserMedia发送真实的数据,但我可能不会,我不知道如何testing或找出。 我认为使用“video.src = window.URL.createObjectURL(stream);” 使Blobstream成为一个实际的数据stream…但我不知道。 这是我的Broadcast.html这是一个非常简单的getUserMedia抢相机和麦克风…然后我连接到套接字,点击广播button,发射发射'join',并通过'webcamstream'的数据发送。 <video autoplay height="280"></video> <button class="recordbutton" onclick="startBroadcasting();">Broadcast</button> <script language="javascript" type="text/javascript"> var socket = io.connect('http://video.domain.com:3031'); socket.on('connect', function() { $('#conversation').append('Connected <br />'); }); function onVideoFail(e) { console.log('webcam fail!', e); }; function hasGetUserMedia() { return !!(navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); } if (hasGetUserMedia()) { alert('It is […]

Jade不再接受没有JavaScript划定的内联variables?

当我在版本0.34.1(版本1.0.0之前)中使用Jade时,我能够使用内联variables,例如: test = 'fun' p #{test} 哪个会正常输出: <p>fun</p> 但是现在输出: <test>= 'fun'</test> <p></p> 看来这可能在版本1.0.0中已经改变; 虽然,我没有看到描述变化的文档( https://github.com/visionmedia/jade/blob/master/History.md#100–2013-12-22 )。 如果我使用JavaScript的划定,它的工作原理: – test = 'fun' p #{test} 我认为这是因为JavaScript的划定现在是必需的。 我使用grunt-contrib-jade 0.9.1版本和http://jade-lang.com/demo/在本地运行这些testing。 有什么方法可以改变这种情况吗?是否有任何确定的发现为什么发生这种变化? 编辑 感谢@Jonathan Lonowski指出在删除特殊赋值语法中已经注意到了这一点。

节点快速应用程序 – 构造单元/集成testing

我试图为我的nodejs / express应用程序设置我的testing套件。 我有一个类似于这个例子的结构,我有一个应用程序文件夹,其中是模型,视图,控制器文件夹。 我有我的testing目录目前拆分为 单元 积分 在单元里面,我模仿了app的文件夹结构。 我有我的模式等unit testing…保存到一个testingMongoDB实例 我的问题是,我应该unit testing我的控制器,还是应该保存集成testing? 我的“控制器”看起来像: 控制器/ account.js exports.login = function(req, res) { res.render('account/login', { title: 'Log In' }); }; exports.login_post = function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { return next(err); } if (!user) { return res.redirect('/account/login'); } req.logIn(user, function(err) { if (err) […]

事件顺序ExpressJS /节点

我试图使用事件来设置一个简单的ExpressJS Web服务器caching控制头。 代码看起来像这样: app.get('*', function (req, res, next) { helper.setCacheHeader.call(res, SIX_MONTHS); // If something goes wrong (and we know about it) remove the cache value res.on('nocache', function () { helper.setCacheHeader.call(res, 0); }); next(); }); 这是路由器的第一个路由,所以每个非静态文件都会经过这个路由。 我在代码中有一些地方可能会出错,我只是发送一个空的200,并在res上发出“nocache”事件。 if (err) { res.emit('nocache'); return res.send(200, foo_bar) } 这似乎工作,当我触发一个错误事件,我的caching头被设置为0,如预期。 然而,我盯着它的时间越长,我就越不确定。 所有事件处理程序在响应结束( res.send ) 之前是否已解决? 或者这是一个真正的竞争条件,我只是保持幸运,所以它看起来像在工作?