Node.js,Express,Mongoose – inputvalidation – 在路由或模型中?

我有一个restapi资源,接受一个JSON文章。 例: { "location": { "coordinates": [ -122.41941550000001, 37.7749295 ] } 然后通过Express从请求中收集坐标: module.exports.create = function(req, res, next) { var coordinates = req.body.location.coordinates; …. 然后这些提交给一个mongoose模型。 我正在写这个testing,在这个地方。坐标缺less,例如 { "foo": { "bar": [ -122.41941550000001, 37.7749295 ] } 然后在模型的validation部分失败: locationSchema.path('location.coordinates').validate(function(coordinates){ ^ TypeError: Cannot call method 'validate' of undefined 所以我的问题是我将如何validationinput是正确的? 在进入模型之前,是否应该在路线上完成这项工作?还是应该在模型中完成? 任何例子,如何也将不胜感激。 作为参考,Mongoose模型看起来像这样: var locationSchema = new Schema({ userid: { […]

Node.js + Chai / Mocha /应该:针对相同的响应运行多个testing

我正在使用与以下类似的东西来执行一系列使用Mocha的APItesting。 这很好,但是它需要为每个testing制作一个单独的API调用。 我想要使​​用相同的API调用,并针对该响应运行多个testing。 我一直在阅读你before可以使用的方法,但是Web上的所有例子都没有显示它使用API​​调用? var chai = require('chai'); var request = require('request'); var async = require('async'); var assert = chai.assert, expect = chai.expect, should = chai.should(); describe('/', function () { it('should return 200', function (done) { request.get('http://localhost:8000', function (err, res, body) { res.should.have.status(200); done(); }); }); it('should say "Hello, world!"', function (done) { request.get('http://localhost:8000', function […]

从未在节点js中释放使用过的内存。 很奇怪

我刚刚完成开发我的第一个node.js应用程序,现在我正在testing它在我的VPS。 观察进程“节点”资源的使用情况,我注意到当请求一个页面(特别是一些页面)时,内存使用量的增加。 特别是,如果请求的页面是一个静态页面,增加是最小的。 如果请求的页面是/ admin,增加可以是1mb! 当然,当/ admin请求时,我的服务器比静态页面服务更多。 他连接到mongodb,他执行4“查找”,他绑定结果到一个HTML模板使用绑定 。 现在有什么问题? 这个记忆使用,将永远不会被释放! 所以我认为在我的代码中有一个逻辑错误,但后来我做了另一个更有趣的testing。 考虑一下这个非常简单的nodejs服务器: var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(3000, 'my_public_ip'); 如果我试图用浏览器发出多个请求(简单地通过按住f5一分钟),内存使用增长缓慢,即使经过很长时间和closures浏览器之后,进程使用的内存也不会释放。 现在,在我的/pipe理代码中可能会出现一些错误(使用了1MB的内存,并且从未释放每个请求都非常高!),但是我认为上面的简单脚本使用的内存永远不会释放! 你怎么看待这件事? 有一种方法可以避免它? 另外,(在我的真实服务器),我用你的方式使用memwatch : var memwatch = require('memwatch'); memwatch.on('leak', function(info) { console.log(info); process.exit(1); }); 如果我用浏览器执行多个请求,大约10秒钟后,我正在做,过程将退出,这是错误的: { start: Wed Nov 26 2014 08:21:07 GMT-0500 (EST), end: […]

级联的承诺

除了一个简单的承诺之外,任何事情都会让我感到困惑。 在这种情况下,我需要在N个对象上连续执行2个asynchronous调用。 首先,我需要从磁盘加载文件,然后将该file upload到邮件服务器。 我更喜欢一起做这两个动作,但是我已经通过首先完成所有的读取操作并将所有的上传次要做到了。 下面的代码工作,但我不禁认为它可以做得更好。 有一件事我不明白的是为什么when.all不拒绝。 我对文件的解释似乎意味着,如果其中一个承诺被拒绝,那么所有的人都会拒绝。 为了testing错误,我已经提出了较低的解决scheme。 没有错误的事情似乎工作正常,是有道理的。 mail_sendOne({ from: 'greg@', to: 'wilma@', subject: 'F&B data', attachments: [ {name: 'fred.html', path: '/fred.html'}, {name: 'barney.html', path: '/barney.html'} ] }) .done( function(res) { console.log(res) }, function(err) { console.log('error ', err); } ) function mail_sendOne(kwargs) { var d = when.defer(); var promises = [], uploadIDs = […]

无法弄清楚如何使用asynchronous请求的收益率

我对节点有点新鲜,对于koa我是全新的。 我正在尝试使用生成器来向API执行asynchronousWeb请求,但是我无法弄清楚如何将所有的部分放在一起。 作为一个说明,我使用蓝鸟,因为我看到一些例子这样做,这似乎是一个好主意。 如果没有蓝鸟有更简单的方法去做我想做的事情,那也是很好的做法。 在我的模块中: plugin.searchForItem = function * (name) { Promise = require('bluebird'); request = Promise.promisifyAll(require('request')); console.log("making request"); yield request.getAsync('http://apisitegoeshere.com/apicall').then(function * (result) { var response = result[0]; var body = result[1]; console.log(response.statusCode); yield response; }); }; 我这样称呼它: search.searchForShow = function (name) { data = this.plugins[0].searchForItem(name); console.log("search returned: " + data); console.log("search returned2: " + […]

Expressjs REST API浏览器

我一直在玩loopback,它有非常好的API资源pipe理器(不知何故提醒我Java的JMX),显然它是集成在框架本身。 有没有一个简单的方法来重新创build与任何npm包相同的经验? 如果不是的话,除了谷歌文档外,如何以方便的方式将您的API暴露给客户端的开发人员?

在Ubuntu 14.04上的MEAN堆栈突然停止工作

好吧,这太臭了,这里是独家新闻: 我正在帮助一个朋友在使用MEAN堆栈(mongodb,express,angular和nodejs)的网站项目上工作,我正在运行Ubuntu 14.04。 我对Linux非常了解,而且我是一名经验丰富的Web开发人员,但我的大部分经验都是使用LAMP堆栈。 直到今天晚上,我一直在做这个MEAN栈项目。 我的朋友跳回到今天晚上的发展,我帮助他们刷新他们在Mac上的节点env(他们大多做前端的HTML / CSS,我做全堆栈)通过运行npm更新和项目工作正常。 指出我可以轻松地刷新我的节点环境,以更加当前我试过同样的事情: 我试图更新我的节点和NPM环境,因为它已经过了几个月(我知道它的坏,我搞砸了,我承认它),我想我正在使用Node.js v 0.3.2.something ,没有想到在这个混乱发生之前检查版本号。 但现在我得到了疯狂的随机错误集,未满足的依赖关系,我无法通过使用npm安装来获取它们来解决未满足的依赖关系,我不能得到grunt来启动开发服务器,我试过删除节点和npm并重新安装(现在运行nodejs 0.10.25)已经运行apt-get update,apt-get install nodejs,apt-get install nodejs-dev,npm update,npm install等,但都无济于事。 我无法坚持和超越沮丧,请帮助! 下面是我得到的一些错误/缺失依赖的示例: module.js:340 throw err; ^ Error: Cannot find module './helpers' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at Object.<anonymous> at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load […]

bower安装后缺lessbower_components文件夹

在个人项目中,我跑了今天早上npm install && bower install svn结帐后。 所有的软件包似乎都下载并没有错误地安装,所有的火灾都是绿色的。 但安装后, bower_components文件夹仍然丢失。 我testing了一个bower cache clean但没有效果。 此外,我更新了我的凉亭版本# npm -g update bower ,但它没有更多的影响。 任何想法 ? 这里是凉亭安装输出: bower exifreader#* not-cached git://github.com/mattiasw/ExifReader.git#* bower exifreader#* resolve git://github.com/mattiasw/ExifReader.git#* bower geolocationmarker#* not-cached git://github.com/shahariaazam/geolocationmarker.git#* bower geolocationmarker#* resolve git://github.com/shahariaazam/geolocationmarker.git#* bower angular#1.2.27 cached git://github.com/angular/bower-angular.git#1.2.27 bower angular#1.2.27 validate 1.2.27 against git://github.com/angular/bower-angular.git#1.2.27 bower cryptojslib#~3.1.2 cached git://github.com/sytelus/CryptoJS.git#3.1.2 bower cryptojslib#~3.1.2 validate 3.1.2 […]

为什么使用grunt-contrib-cssmin正在改变我的CSS而它应该只是缩小

我正在使用grunt-contrib-cssmin来缩小我的css文件。 我认为这个工具(grunt-contrib-cssmin)只是一个clean-css的包装。 一切都很好,除了这个咕噜插件正在改变我的CSS。 我试图使用从clean-css存储库中find的每个选项,但没有任何工作。 请帮助我这个东西是杀了我! Grunt文件: module.exports = function (grunt) { 'use strict'; // Project configuration grunt.initConfig({ // Metadata pkg: grunt.file.readJSON('package.json'), cssmin: { options: { keepSpecialComments:'1', processImport: false, roundingPrecision: -1, shorthandCompacting: false, aggressiveMerging: false, advanced: false, }, minified_css_admin: { src: ['public/admin/css/style.default.css','public/admin/prettify/prettify.css','public/admin/css/bootstrap-fileupload.min.css','public/admin/css/developer.css'], dest: 'public/admin/css/minified-css-admin.min.css', }, }, }); // These plugins provide necessary tasks grunt.loadNpmTasks('grunt-contrib-cssmin'); // Default […]

抓住webhook node.js

我正在尝试捕获由Node.js中的Aftership API所做的PUT / webhook请求。 每次需要做推送通知时都会发出一个PUT请求,我正在使用Parse发送通知,但是我需要一些来自webhook的数据。 webhook的标题看起来像Content-Type: application/json并包含这些数据: ts – 事件发生的UTC unix时间戳 事件 – 事件的名称(用于跟踪更新,值将为'tracking_update') msg – 有关事件发生的消息的详细信息,格式如下。 我将如何去得到跟踪号码,slug和token值在节点或js中的自定义字段字典? { "event": "tracking_update", "msg": { "id": "53aa94fc55ece21582000004", "tracking_number": "906587618687", "title": "906587618687", "origin_country_iso3": null, "destination_country_iso3": null, "shipment_package_count": 0, "active": false, "order_id": null, "order_id_path": null, "customer_name": null, "source": "web", "emails": [], "custom_fields": {}, "tag": "Delivered", "tracked_count": 1, "expected_delivery": null, […]