Articles of expression

在express-validator中的错误之后停止执行stream程

我正在使用express-validator对Express中的request对象进行表单validation。 我做了如下的事情: req.onValidationError(function(msg) { res.render('signup', { error: msg }); }); req.check('email', 'Please enter a valid email.').len(1,256).isEmail; req.check('password', 'Your password must be at least 8 characters.').len(8,256); var user = { email: req.body.email, password: req.body.password }; User.create(user, function(err, result) { console.log(err, result); }); res.render('signup'); 问题是执行stream程继续,并且它执行我的User.create()方法时尝试两次呈现相同的资源。 它也会抛出一个Error: Can't use mutable header APIs after sent. 因为尝试了双重渲染。 我怎样才能防止这种情况发生?

如何在mixin中通过名称获取variables

表格(部分): include ../mixins/form-helpers form(action='/users/create', method='post') div.fields fieldset mixin field('text', 'email', 'Email') mixin field('password', 'password', 'Password') mixin field('password', 'password_confirmation', 'Confirm password') mixin field('username', 'username', 'Username') mixin submit('Register') 字段mixin看起来像这样: mixin field(type, n, label) .clearfix label(for='#{n}') #{label} .input input#password.span8(name=n, type=type, value=user[name]) 控制器: (req, res)-> user = email: 'someemail' password: '' password_confirmation: '' username: 'someusername' res.render 'users/new', user:user 我正在尝试使字段混合更通用一些,所以我可以重用它。 […]

从服务器redirect后页面需要刷新

新的问题,但真的很接近需要刷新页面在jQuery的移动 。 我有一个/login页面,第一次访问应用程序时,用户被redirect到(因此没有logging)。 顺便说一句,要login,用户只需提供一个用户名。 这个/login页面提供了一个带有单个文本input的表单,如下所示: <form method="post"> <span>Votre pseudo:</span> <input id="username" name="username" data-bind="value: username, valueUpdate: 'afterkeydown'" /> <input type="submit" id="join" data-icon="star" value="Rejoindre !" data-bind="enable : canJoin"/> </form> 在表单上没有action属性,因此(除非我遗漏了一些基本的东西,不要希望)表单提交后发送到/ login。 我用express来使用NodeJS,处理post请求服务器端看起来像这样: app.post("/login", function (req, res) { //do some stuff, store username for instance… res.redirect("/"); }); 我的确被redirect到了/匹配页面(索引),但是这个索引页面中的embedded式脚本没有运行,并且一些jquerymobile对象没有完全运行:这个索引文件有2个JQM页面(两个div与data-role =“page “),第一个JQM页面(div)的页脚有两个链接,一个指向第二个页面(div)(通过锚点,JQM方式)。 但是这个链接也不活跃。 我必须重新加载/页面才能使embedded的脚本运行($(document).ready,脚本在标题中…)以及所有JQM对象正确响应。 提示:在重新加载页面之前,在firebug中,post / login请求的响应有一个302 statut(是由于redirect指令服务器端),并且下面的get / request(肯定是由于redirect指令服务器端)尽pipe它可以加载页面和它embedded的单个图像,但是仍然有一个空的响应。 […]

更改LESS文件不会自动重新编译在节点/快递/咖啡设置

在用咖啡快速运行之后,我终于把LESS编译成了一个Node.js应用程序,之后我遇到了一个问题,我似乎没有什么想法: 对LESS文件的更改不会从express调用的LESS编译器重新渲染。 在我的主app.coffee文件中,可以find(按此顺序) app.use exp.compiler { src: __dirname + '/public', dest: __dirname + '/public', enable: ['less'] } app.use exp.methodOverride() app.use exp.bodyParser() app.use exp.cookieParser() app.use exp.static __dirname + '/public' 之后,会话和中间件被添加。 没有重新编译.css文件到.css,当请求通过应用程序重新启动持续存在的问题。 我已经尝试交换exp.compiler和exp.static行,但是除了第一个客户端请求(简而言之,css文件被呈现但没有被传递)发生什么变化之外,没有任何改变。 删除.css文件显然会让代码重新编译成.css文件,但这并不是我想像的那样。 还有什么我可以做的吗?

Nodejs Expressjs会话IP和浏览器代理匹配

我正在使用connect-mysql-session将会话存储在数据库中。 现在我的问题是我如何添加包含浏览器代理和IP地址的用户数据来检查会话是否有效? 我如何获得这些信息? 我如何检查它是否匹配? users.login(credentials,function(err, results) { //On errors if (err) { res.render(routes.index, { title: 'Login' }); //On success } else if (results[0]) { //Set session data and redirect to start page req.session.userdata = results[0]; req.session.userdata.email = req.body.email_login; req.session.is_logged_in = true; res.redirect('/start'); //Wrong credentials } else { req.flash('warning','Wrong password or login'); res.render('index', { title: 'Login' […]

可以使用表单validationinputtypes的“文件”是否需要?

我使用express-form https://github.com/dandean/express-form 它是否有能力validationtypesfile的input? 我特别想require有人上传文件。 编辑林纳斯:) 我试过: field("pdf").required("pdf", "You must select a file to upload.") 问题是这是寻找req.body.pdf而不是req.files.pdf ,所以它总是认为validation失败。 编辑/工作代码:根据Linus的回答,我做了什么来实现它。 我不仅需要configurationdataSources参数,还需要检查字段的size属性,因为只是在字段上做了required就不够好,因为即使文件input为空,它仍然存在(元数据等)。 所以相反,我做了一个自定义validation函数,确保pdf.size大于0.在我的代码中,我也检查是否有title 。 我留在这里,以防万一有人想知道如何把多个validation串起来。 var form = require('express-form') .configure({dataSources: ['body', 'files', 'query', 'params']}); form( field("pdf.size").custom(function(value) { if (value <= "0") { throw new Error("You must select a file to upload."); } }) , field("title").trim().required("title", "Please enter a title […]

为什么node.js Express框架在设置会话variables时不使用callback?

我已经注意到,为了在会话中存储一个值,您只需调用req.session.key = value,而无需指定callback。 我使用connect-mysql模块将mysql设置为会话存储适配器。 所以我想知道每次我保存一个值的会话,它正在更新的分贝,不应该有一个callback与此相关? 然而,在我看来,人们正在愉快地同步使用它。 有人可以解释为什么这种情况? 谢谢。

expression压力testing

我有一个相当困难的时间来确定我的networking服务器(切诺基)和expressjs网站之间的性能瓶颈。 由于POSTstream量的增长,我们开始不时地看到性能问题。 所以我devise了一个testing,看网站1,2,3和4个实例的突破点是什么,并且由于糟糕的性能(以每秒5个很好,每秒10个很差)而震惊。 根据我的性能logging,一个完整的请求开始到结束在1000-4000毫秒之间开始,在短时间开始之后以线性趋势增加,因此在大约5分钟之后请求需要40,000-60,000毫秒。 在expressjs网站logging中,开始结束请求的性能logging需要100-400毫秒(大部分时间是90-390毫秒,这个时间是等待Java API响应的)。 我已经调查了连接池/最大套接字,但不知道如何使用快速configuration,并且随着不断增长的stream量,我们开始感受到来自每一个减弱性能的热量。 现在我有两个理论:1.压力testing代码有些问题, 2.从压力testing应用程序或expressjs发送请求时,有一个小的连接池。 如果上述任何一个是真的,我不知道如何解决这些问题。 – 压力testing应用程序 – /* * POST stress testing */ var rest = require( "restler"); var u = require( "../underscore")._; var uuid = require( "node-guid" ); var fs = require( "fs" ); var quoteContent = fs.readFileSync( __dirname + "/data/quoteList.json" ); var quotes = JSON.parse( quoteContent ).quotes; […]

如何处理express.js路由?

我有类似的路线 app.get('/home',requireLogin,routes.home) exports.home = function(req, res){ res.render('index', { title: 'home' }); }; 现在如果我想我的url看起来像这样 /home/menu/someting 我必须创build像这样的路线 app.get('/home/menu/someting',requireLogin,routes.newRoutes) 或者我可以只修改routes.home来处理其余的url,就像是有第二个/东西做某事。 我知道我可以有家/:参数,但我需要的url看起来完全像家/菜单/东西,后我会有:参数。 只是回答我这是可能的处理/ home和/ home /菜单在相同的路线,没有参数

Express和Node.js模块i18n和现在缺乏助手

从https://github.com/mashpie/i18n-node的自述文件中,他们将展示如何使用快速模板进行设置,但是它使用助手: // register helpers for use in templates app.helpers({ __i: i18n.__, __n: i18n.__n }); 那么在Express 3.0中没有帮助者,那么如何在模板中注册i18n模块呢? 谢谢你的帮助!