Node.js和Mongoose正则expression式查询多个字段

我想用两个相同的正则expression式来查询多个字段。 在这个查询中,我想接受单个文本input,并检查firstName和lastName字段的结果。 我可以使用mongoose文档中的正则expression式来查询单个字段,但“或”子句的语法给我带来麻烦。 var re = new RegExp(req.params.search, 'i'); app.User.find().or([{ 'firstName': { $regex: re }}, { 'lastName': { $regex: re }}]).sort('title', 1).exec(function(err, users) { res.json(JSON.stringify(users)); }); (我在node.js 0.6.12上运行mongoose 2.7.1)

用Mongoose和Node.js和Underscore生成代码的直接方法是什么?

我想生成这样的东西: http://www.ivarvong.com/2010/08/node-js-connect-mongoose-and-underscore/ 但是我想要生成html模板和其他客户端代码,并且要么为Node.js代码和客户端(jQuery或其他)提供通用的/整体的save / query / reads或生成个性化的代码,所有这些在模型上。 所以就像使用Underscore来填充一些基于Monogoose(MongoDB)模型的模板。 基于这个模型,你可以得到一个可以填写的HTML表单,一些客户端和服务器端的代码将数据保存到MongoDB中,还有一些代码在列表或表格中显示该模型的数据。

npm“通缉”vs“最新”

我使用npm来安装一些命令行工具。 有痒始终是最新的,我发现命令npm -g outdated 。 wanted和latest的列有什么区别? 该文件指出: 由此产生的字段'wanted'根据package.json中指定的版本显示最新版本,'latest'是最新版本的包。 但是我根本没有发现它。 例如在我的系统上,我得到: Package Current Wanted Latest Location cordova 5.3.1 5.3.3 5.3.1 lib npm 3.3.4 3.3.4 3.3.3 lib 怎么可能比latest更高? 这似乎是相矛盾的: 该领域的最新版本的包 我应该更新哪个版本(我只使用命令行,而不是任何node.js代码)?

安全沙盒并执行用户提交的JavaScript?

我希望能够让用户提交任意的JavaScript代码,然后将其发送到Node.JS服务器,并在将输出发送回多个客户端(如JSON)之前安全地执行。 eval函数让人想起,但我知道这有多个安全问题(用户提交的代码将能够访问节点的文件API等)。 我曾经看到过一些像Microsoft Web Sandbox和Google Caja这样的项目,它们允许执行清理标记和脚本(用于在网站上embedded第三方广告),但似乎这些是客户端工具,我不确定他们是否可以在Node中安全使用。 有没有一个标准的方法来沙盒和在Node中执行不可信的JavaScript,获得输出。 尝试和做这个服务器端是错误的吗? 编辑:用户能够充分利用JavaScript的全部function并不重要,事实上,能够挑选并select将提供给用户代码的API将是优选的。 编辑:我打算继续前进,并与我发现的更新。 这个Sandcastle模块( bcoe/sandcastle sandcastle)似乎旨在做我脑海中所想的事情。 不知道它是多么的安全,但是因为我不是那么重要,我想我会试试。 如果我能够成功地做到这一点,我会添加自己的答案。

Node.js上的MongoDB连接的最佳做法是什么?

这对我来说有点不清楚(我刚刚开始使用Node和Mongo),而且由于服务器的性能和紧张(我猜这是另一个问题,但是我会在post的结尾)。 所以,假设我正在用Node.js和Restify编写一个API,其中每个API端点都对应一个函数,我应该: a)打开数据库连接并将其存储在全局variables中,然后在每个函数中使用它? 例: // requires and so on leave me with a db var, assume {auto_reconnect: true} function openDB() { db.open(function(err, db) { // skip err handling and so on return db; } } var myOpenDB = openDB(); // use myOpenDB in every other function I have b)打开数据库连接,然后把所有东西放在一个巨大的closures? 例: // same as above db.open(function(err, […]

以同步方式执行asynchronous调用

在过去的几个小时里,我一直试图绕过这个问题,但无法弄清楚。 我想我还是必须习惯于函数式的编程风格;) 我写了一个遍历目录结构的recursion函数,并对某些文件进行处理。 这个函数使用asynchronousIO方法。 现在我想在整个遍历完成时执行一些操作。 我如何确保在所有parse调用完成后执行此操作,但仍使用asynchronousIOfunction? var fs = require('fs'), path = require('path'); function parse(dir) { fs.readdir(dir, function (err, files) { if (err) { console.error(err); } else { // f = filename, p = path var each = function (f, p) { return function (err, stats) { if (err) { console.error(err); } else { if […]

如何debuggingnode.js导致100%的CPU使用率?

我有一个使用Express和Redis的节点应用程序。 在我们的开发服务器上,有一点使用节点开始使用100%cpu。 应用程序仍然响应,但最高报告节点使用100%。 在节点重新启动之前,CPU不会掉落。 我没有把它归结到任何引起它的特定路线或function上。 什么是诊断这个问题的最好方法? 我用v8-profiler查看了node-inspector,它给了我在这里报告的同样的错误https://github.com/dannycoates/v8-profiler/issues/10

有没有类似于用JavaScript编写的Fabric的部署工具?

我把一个几乎全部在node.js上使用Javascript的移动开发堆栈放在一起。 除了SASS(只选LESS)和Fabric之外。 我不想污染我的开发目录,因为我必须结合和缩小JS和CSS,我想我也可以使用node.js来服务我的代码。 我想减less对Ruby和/或Python的依赖。 我没有真正使用Fabric的所有function,所以我有希望replace它。 但是我找不到任何用Javascript编写的类似工具。 我所需要的是: 从git仓库拉。 在本地安装依赖关系。 将JS / CSS调用require.js / SASS进行缩小和组合。 运行testing套件。 通过node.js为代码提供动手或使用Ripple进行testing。 结构可能已经是矫枉过正,我只用于我的Python Web项目,因为必要的服务器不能在我的机器上运行,但这不是这种情况。 如果没有Fabric,最好的办法是什么?

如何用browserify和gulp输出多个包

我浏览了捆绑文件,它工作得很好。 但是如果我需要生成多个捆绑包呢? 我想结束dist/appBundle.js和dist/publicBundle.js gulp.task("js", function(){ return browserify([ "./js/app.js", "./js/public.js" ]) .bundle() .pipe(source("bundle.js")) .pipe(gulp.dest("./dist")); }); 显然这是不行的,因为我只指定一个输出(bundle.js)。 我可以通过重复上面的说法来完成这个工作(但是由于重复,这个说法并不正确): gulp.task("js", function(){ browserify([ "./js/app.js" ]) .bundle() .pipe(source("appBundle.js")) .pipe(gulp.dest("./dist")); browserify([ "./js/public.js" ]) .bundle() .pipe(source("publicBundle.js")) .pipe(gulp.dest("./dist")); }); 有没有更好的方法来解决这个问题? 谢谢!

Express应用程序中未处理的拒绝

我有很多基于ES6承诺的代码在我的快车应用程序中运行。 如果有一个从未被捕获的错误,我使用下面的代码来处理它: process.on('unhandledRejection', function(reason, p) { console.log("Unhandled Rejection:", reason.stack); process.exit(1); }); 这适用于debugging目的。 但在生产中,我想触发500error handling程序,向用户显示标准的“出错”页面。 我有这个捕获所有error handling程序,目前适用于其他例外: app.use(function(error, req, res, next) { res.status(500); res.render('500'); }); 将未处理的拒绝放在中间件内不起作用,因为它是asynchronous的,并导致Error: Can't render headers after they are sent to the client. 我将如何去unhandledRejection一个unhandledRejection拒绝500页?