Articles of expression

如何处理包含非utf8字符的GET参数?

在一个基于nodejs / express的应用程序中,我需要处理可能包含使用iso-8859-1字符集编码的变音符号的GET请求。 不幸的是,它的查询stringparsing器似乎只处理纯ASCII和UTF8: > qs.parse('foo=bar&xyz=foo%20bar') { foo: 'bar', xyz: 'foo bar' } # works fine > qs.parse('foo=bar&xyz=T%FCt%20T%FCt') { foo: 'bar', xyz: 'T%FCt%20T%FCt' } # iso-8859-1 breaks, should be "Tüt Tüt" > qs.parse('foo=bar&xyz=m%C3%B6p') { foo: 'bar', xyz: 'möp' } # utf8 works fine 有没有隐藏的选项或其他干净的方式来使这个工作与其他的字符集呢? 默认行为的主要问题是,我无法知道是否存在解码错误 – 毕竟,input可能是简单解码的东西,看起来像一个urlencodedstring。

Express.js抛出错误:ENOENT在Linux服务器上

所以,我一直在研究一个上传脚本(代码如下),我已经在我的Windows机器上工作,但在我的Linux服务器上,它似乎失败 Error: ENOENT, open 'uploads/da5ab67b48ea2deecd25127186017083' 我明白,错误是说没有path/文件,但我尝试文件重命名之前检查文件的存在。 exports.product_files_upload = function (req, res) { if (req.files) { var tmpArray = []; for(var file in req.files){ console.log(file) if (file){ var splitName = file.split('-'); if (splitName.length > 1) { var username = splitName[0]; var productId = splitName[1]; var index = splitName[2]; } else { return; } } else { […]

获得CORS与JQuery客户端,Node / Express服务器一起工作的问题

我有一个问题得到跨来源资源共享与cookie的工作。 这是我的设置: 客户: $.ajax({ type: 'POST', url: '/processReq', data: params, xhrFields: {withCredentials:true}, crossDomain: true, success: … }); 我已经在浏览器中debugging了客户端,并且已经证实XMLHttpRequest.withCredentials实际上是正确的。 服务器: 我正在设置以下标题: res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Origin', '*'); 我的问题是,我不能让会话cookie被浏览器存储,并发送到服务器的后续请求。 以下是浏览器中的响应标题: { "server": "nginx/1.2.6", "date": "Fri, 01 Feb 2013 23:46:07 GMT", "content-type": "application/json; charset=utf-8", "content-length": "306", "connection": "keep-alive", "x-powered-by": "Express", "access-control-allow-credentials": "true", "access-control-allow-origin": "*", "set-cookie": [ "id=s%3Azm1m…NXe4Lkr9rLw; Domain=api.mydomain.io; Path=/; Expires=Sat, […]

如何纠正错误作为没有方法'onValidationError'validation的node.js?

我有registry单,并将值发布到注册函数,在那里它将validation与节点validation器的表单值。 但是,当我尝试使用节点validation器,它不断得到错误TypeError:Object#没有方法'onValidationError' 。 validation器已经安装在我的应用程序。 在app.js中 app.post('/register', test.register); 在test.js中 var check = require('validator').check, sanitize = require('validator').sanitize; exports.register = function(req, res){ var errors = []; req.onValidationError(function(msg) { //res.render('signup', { error: msg }); errors.push(msg); }); req.check(req.body.email, 'Please enter a valid email').len(6,64).isEmail(); req.check(req.body.username, "Username can't be empty!").isNull(); if (errors.length) return res.render( 'register', { regErr: errors.join('\n') } ); } 如何纠正这个错误?

nodeJs上的TimeZone使用oAuth

我正在使用滚揉机API,我正在使用node.js的快速框架,但使用tumblr oAuth时遇到问题。 问题在于时区的差异。 我如何改变我目前的时区?

Express.js中间件集成testing

我正在为express.js 2.5.8写一些中间件。 目的是使用基于会话的附加属性来修改请求对象。 我有unit testing了中间件function。 现在,我想进行一些较低级别的集成testing,以确认中间件正在被快速服务器使用。 我的典型做法是监视中间件function。 但是,这并不是certificate中间件按照预期工作的最有效的方式。 我想做什么(如果可能/可行的话)是加载应用程序,注入任意会话数据(它不需要是有效的),请求/访问发送中间件结果的testingpath。 从那里,我可以对这个结果作出断言。 我一直在使用supertest(superagent),僵尸,并要求testing,每个都有不同程度的成功。 我现在正在努力的是将会话数据注入请求,无论采用哪种forms。 我将不胜感激一些指导。 人们在testing这种types的行为时使用了什么方法?

需要在节点中使用jQuery

我有一个节点,在窗口上的mongodb设置,并在开发一个Web应用程序。 在server.js文件中,我有一个类似这样的post路线: var http=require('http'); app.post("/leadAPI/ed",function(request,response){ var data={firstname:request.body.firstname,lastname:request.body.lastname,email:request.body.email,areaOfInterest:request.body.areaOfInterest,highestEducation:request.body.highestEducation,daytimePhone:request.body.daytimePhone,eveningPhone:request.body.eveningPhone,addressOne:request.body.addressOne,addressTwo:request.body.addressTwo,city:request.body.city,state:request.body.state,zip:request.body.zip,country:request.body.country}; edDoc=new edModel(data); edDoc.save(); var options={ hostname:'www.someRemoteUrl.com', port:80, path:'/some/path/on/that/url?'+$.param(data), method:'POST' }; var req=http.request(options,function(res){ console.log(res); }); }); 这是行不通的,因为$(param)不会在没有npming jquery的节点上运行。 问题是在windows上安装jquery包的节点没有正确安装。 有没有其他的方法? 我需要以一种干净的方式从该对象中构build一个查询string。

无法在Node.js Express中使用表单

我正在尝试使用表单提交到网站,以便我可以呈现网站。 这是我的forms div.ten.columns#LogModal h3 Log In p a.button(href='#', data-reveal-id='exampleModal') Example modal div#exampleModal.reveal-modal h2 Log In p form(method='get', action='/Log') input(type='text', placeholder='Username', name='Username', id='Username') input(type='password', placeholder='Password', name='Password', id='Username') input(type='submit', value='Log in', id='LogButton') script(src='javascripts/foundation.min.js') script(src='javascripts/app.js') script $(window).load(function(){ $("#featured").orbit(); }); 它只是像这样通过server.js app.get('/Log', User.Home); 并最终呈现如下的网页: exports.Home = function (req, res) { res.render('MyHome'); }; 所有这一切都会导致这个错误: Cannot GET /Log?Username=&Password=&LogButton=Log+in 我希望它在这个时候没有任何login信息的工作,因为它只是现在的演示。 有谁能够帮助我?

node.js + express:`sendfile`给Ajax请求给404

节点noob在这里。 :)我正在用代码发出一个Ajax请求 var path = "/path/to/file.html"; $.get(path, function(data) { $("#post").html(data); }); 并在服务器端,响应 app.use(express.directory(__dirname + '/public')); app.get('/path/*', function(req, res) { var is_ajax_request = req.xhr; if(is_ajax_request) res.sendfile(req.path); else res.sendfile('public/index.html'); }); 实际文件位于public/path/to/file.html 。 出于某种原因,Ajax给我的错误 GET http://localhost:3000/path/to/file.html 404 (Not Found) 即使path是正确的。 事实上,如果我删除了整个app.get函数,它发现文件没有问题。 有没有另外一种方法来回应Ajax请求?

为什么NodeJS域的文档代码试图终止这个过程?

在官方的NodeJS文档中,有一些代码示例,当域中出现exception时,进程将尝试正常退出(它closures连接,等待其他请求并等待一段时间,然后退出)。 但为什么不发送500错误,继续工作? 在我的应用程序中,我想在用户input无效时抛出一些预期的错误(如FrontEndUserError),并在中间件的某处捕获这些exception,以便向客户端发送相当错误的消息。 有了领域,它很容易实现,但是这有什么陷阱吗? app.use (err, req, res, next) -> if err instanceof FrontEndUserError res.send {error: true, message: err.message} else log err.trace res.send 500