Articles of express

从Node(Express)处理MongoDB连接问题

我有一个快速应用程序,它在启动时连接到MongoDB服务器,并按需提供请求(我不断开 – 这是一个单线程服务器,所以没有池 – 很简单的东西) 问题在于MongoDB服务器可能会在一段时间内不可用(不在现场),而Express App不会崩溃,似乎任何对服务器的请求都将无限期运行,直到连接恢复! 我想限制这个(例如,在一段时间后抛出一个错误),但我似乎无法做到这一点… 我使用连接选项“{server:{auto_reconnect:true}}”,似乎确保一旦MongoDB服务器重新出现,请求就完成了(没有它,在停机期间发出的请求似乎永远运行…)无法访问客户端代码,所以我无法修复它… 我假设一个'connectTimeoutMS'或'socketTimeoutMS'的组合将允许我终止请求,当MongoDB长时间不可用时,但我不能让这些工作(我已经尝试了它们作为连接选项,通过它们在URI等等) 在MongoDB重新出现之前,任何打开一个Collection和Find / Insert / Update的尝试都会“挂起” – 我已经离开了30多分钟,所有事情都只是坐在这里(并且在networking恢复的时候完成了AOK)! 什么是最好的方法呢? 我应该专门为每个请求打开一个连接(不是真正的性能问题 – 这不是一个高容量的应用程序)还是有什么我失踪? 更新以添加连接代码 var myDB var mongodb = require('mongodb') var uri = // some env vars and stuff mongodb.MongoClient.connect(uri, {server: {auto_reconnect: true}}, function (err, db) { myDB = db }) myDB然后用于其他地方打开集合 – 并从那里的句柄用于查找/插入等 如果与数据库的连接中断,myDB.collection()调用(或者调用查找/插入的句柄)将会挂起,直到连接恢复 – 我已经尝试过的任何东西都将导致它们更快地超时。 […]

router.get('/')在expressjs不工作

我无法通过'/'路由模式访问我的快速应用程序的主页。 它正在处理/索引例如我的快递版本是4.6。 我试过app.use('/ *',路由器),但我的应用程序没有响应或503服务暂时不可用。 现在它正在通过“/ index”模式工作,其他path正常工作。 只有'/'模式不起作用。 🙂 这是我的代码片段。 var http = require('http'); var express = require('express'); var app = express(); var router = express.Router(); app.use('/', router); app.set('view engine', 'ejs'); app.set('views', './views'); app.use(express.static('./public')); var bodyParser = require("body-parser"); app.use(bodyParser()); var fs = require('fs'); var clientSessions = require("client-sessions"); var form = require('express-form'); var field = form.field; var […]

如何显式查询一个字段并获得所有可能的结果? 蒙戈

如果你有这样一个集合。 user { name: String, email: String, information: String } 你会做这样的事情来得到所有约翰的信息医生的名单。 db.user.find({name: "John", information: "doctor" }); 现在,这使得代码冗余时,有可变的input。 如有排列的字段进行过滤。 我试图使我的查询通用,如这个坏的例子。 因此,我可能希望能够明确说明可以匹配任何值的字段。 以下示例理论上应该返回相同的文档。 例: 非显式(普通) db.user.find({}); 显式(奇怪) db.user.find({name: {$ANY}}); 或者让它更复杂。 db.user.find({name: {$ANY}, information: "doctor"}); 这是行不通的,但目的是要获得所有的医生文件,但在name字段上有任何价值,而不仅仅是约翰的。 也许甚至更复杂的事情是这样的。 db.user.find({name: function(){ if(req.query.name)//check if empty { return req.query.name; } else { return $ANY; } }, information: "doctor"}); 这将是足够通用的使用一个单一的查询实例的dynamic请求行为。据我所知,没有任何这样的实现。 先谢谢你。

如何正确调用passport.js函数与快速路由器?

我试图调用passport.authenticate函数作为对我的注册视图发布请求的响应。 我一直在这里按照这个教程 ,让我的头围绕passport.js和expression,但已经完成指令的第一页,并做了必要的修改express.js 4.0每一页我尝试访问返回错误500,并显示以下stacktrace : TypeError: Object #<serverResponse> has no method 'authenticate' at module.exports (/home/myUserName/Desktop/manufacturing/routes/index.js:66:37) at Layer.handle [as handle_request] (/home/myUserName/Desktop/manufacturing/node_modules/express/lib/router/layer.js:82:5) at trim_prefix (/home/myUserName/Desktop/manufacturing/node_modules/express/lib/router/index.js:302:13) at /home/myUserName/Desktop/manufacturing/node_modules/express/lib/router/index.js:270:7 at Function.proto.process_params (/home/myUserName/Desktop/manufacturing/node_modules/express/lib/router/index.js:321:12) at next (/home/myUserName/Desktop/manufacturing/node_modules/express/lib/router/index.js:261:10) at /home/myUserName/Desktop/manufacturing/node_modules/connect-flash/lib/flash.js:21:5 at Layer.handle [as handle_request] (/home/myUserName/Desktop/manufacturing/node_modules/express/lib/router/layer.js:82:5) at trim_prefix (/home/myUserName/Desktop/manufacturing/node_modules/express/lib/router/index.js:302:13) at /home/myUserName/Desktop/manufacturing/node_modules/express/lib/router/index.js:270:7 这里是/routes/index.js的代码: var express = require('express'); var bodyParser = require('body-parser'); var router = […]

Heroku Node.js应用程序在本地工作,但部署时不工作

我有一个MEAN Stack Heroku应用程序,运行得很好。 但后来我添加了一个新的function: app.get('/userCreated/:id', function(req, res) { if (req.cookies.userCreated == req.params.id) { res.send(true); } else { res.send(false); } }); 而现在我得到一个503(服务不可用)错误加载应用程序。 任何人都有一个想法,为什么这可能是? 我正在使用Angular和$ http.get()来访问这个Express.js函数… 编辑:这里是我的客户端angular色代码,正在打电话给服务器: var deferred = $q.defer(); function thisUserCreated(id) { $http.get('/userCreated/' + id).success(function(data) { deferred.resolve(data); // returns boolean indicating whether the current user has the proper cookie // saying this user created the […]

Express.js和Angular – 身份validation和login会话

我正在使用expressjs和angularjs的应用程序。 基本上,expressjs只是返回一个具有angular度单页面应用程序的.html。 所有的路由都是使用angularjs完成的,expressjs只是暴露了一些web服务(GET,POST)。 所以,如果我只是做一个普通的expressjs应用程序,我会使用passportjs并将用户存储在服务器端的会话中。 当用户尝试访问/pipe理页面时,我会使用护照中间件来检查是否允许路由等等。 干净利落。 但是有了angular度,所有的路由都是在客户端完成的 – 甚至可以评估用户是否login了。现在当然有很多关于这方面的内容,但是几乎所有的解决scheme都在localStorage或者angular色的$cookie存储了任何types的令牌密钥。 现在我想知道 – 安全吗? 如果有人在公用计算机上运行这样的应用程序,并忘记注销,任何人都可以看到localStorage或angular的$cookie并获得令牌,对吧? 那么在客户端使用angularjs实现安全authentication的理论过程是什么?

如何使用 – Express + Docker + Azure来映射端口

我完全被困在以下。 尝试在Azure虚拟机上的Docker中设置快速应用程序。 1)使用docker-machine create -driver azure之后VM是好的… 2)build立完整的图像后: //Dockerfile FROM iojs:onbuild ADD package.json package.json ADD src src RUN npm install EXPOSE 8080 CMD ["node", "src/server.js"] 这里是我卡住的地方: 我已经尝试了以下所有以及更多: • docker run -P (Then adding end points in azure) • docker run -p 80:8080 • docker run -p 80:2756 (2756, the port created during docker-machine create) • docker […]

快递得到错误

我在节点服务器上设置路由到我的应用程序控制器 – var http = require('http'); var app = require('express')(); app.get('/<path>/<query type>', function(req, res) { //Expecting query parameter <query type>?name=<something> var query = req.query.name; var path = '/<path>/<query type>?name='+query; var options = { host: 'localhost', port: 8080, path: path, method: 'GET' }; var reques = http.request(options, function(response) { console.log('STATUS' + response.statusCode); response.setEncoding('utf8'); response.on('data', function(chunk) { […]

Express EJS模板如何传递json对象来查看它是否是未定义的

当用户login时,我将用户分配给window.user对象供客户端使用 请注意,我使用passport.js,这意味着当用户进行身份validation时,req.user将是一个有效的mongoose模型对象。 否则req.user将被定义 passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); }); locals.user被分配在我的路线中。 在我的路由中间件: res.locals.user = JSON.stringify(req.user) //stringify in js instead of ejs, easier to write 最后一步,在我的ejs文件中: <script type="text/javascript"> window.user = <%- (locals.user) || '' %> </script> 如果用户没有login,我应该通过“',还是'{}'或'空'? 在客户端,我最有可能使用angular.fromJson方法,它的文档很差: https ://docs.angularjs.org/api/ng/function/angular.fromJson 不过,我可能使用jQuery.parseJSON非angular度模块。 目前我使用空string,但我必须每次检查长度,这是tedius。

MongoDB / ExpressJS – 当ObjectID包含在variables中时,通过_id删除文档

这是我想要做的: app.delete('/:id', function(req, res){ var removal = req.params.id; MongoClient.connect(dbUrl, function(err, db){ var test = db.collection('test'); test.remove({ _id: ObjectId(removal) }); }); }); 但是当我尝试的时候,它会抛出一个错误,因为ObjectId没有被定义。 我在这个问题上遇到了一些麻烦,因为当我在Jade视图中使用item._id时,它只是返回数字,但当然查询集合时不会收回数字。