Articles of expression

正则expression式等价

我正在试图写一个正则expression式来达到与grep -w相同的结果。 我现在提出的是: var regex = /([^\w]|^)word_to_search([^\w]|$)/; 它似乎正常工作。 有没有一个“更好”的解决scheme,你知道的?

Node.js上的RegExp会导致不确定的模式

我有这个正则expression式: /\|====(.*)====>((.*|\n|\r)*?)<====\1====\|/g 它匹配的模式如 |==== Données ====> byteCode = { id : [], tag : [], ast : [] }; <==== Données ====| $ 1表示第一个捕获组,例如“Données”。 在Firefox中,预期的行为是正确的,但是在node.js中是一个笑话! 如果你用'exec'调用这个正则expression式,程序进入不确定的模式,而不是gc错误,没有超时,没有任何…但程序永远不会结束…为什么? 如果您希望重现这一点,只需在任何terminal中通过此脚本: const regexp = /\|====(.\*)====>((.\*|\n|\r)*?)<====\1====\|/g; const text = String.raw ` |==== Données ====> byteCode = { id : [], tag : [], ast : [] }; <==== Données ====| […]

向Express模型添加一个方法

假设我有一个Express模型: var SchemaDescription = {}; var Model = = new mongoose.Schema(SchemaDescription); Express允许在SchemaDescription中调整数据validation。 在保存它完美的作品,但在更新,由于mongoose性质,它不被称为,并没有干净的方式来称呼它。 我试过Model.pre('update', …); 但没有find在写入数据库之前访问/更正模型数据的方法:因为复杂的validation逻辑,例如在检查之前重新格式化一些数据。 一个合乎逻辑的解决scheme是将validation代码保存/更新控制器的处理程序,但会导致代码的重复。 为了保存MVC模式,至于更新,我想把一个公共方法,模式,或架构,获取input数据和validation它们。 我的尝试看起来像: Model.prototype.validate = function(input, isUpdate) {…}; 要么 SchemaDescription.validate = function(…) {…}; 以不同的组合。 响应总是看起来像"Cannot set property 'validate' of undefined" 有没有一种方法可以将一个自定义的公共函数成员放到Express模型/模式中,以便在控制器中调用? 可以使用什么方法validation保存和更新的数据,而不会出现代码重复,或者将validation逻辑放在控制器上?

奇怪的cors与套接字问题

我正在使用btford.socket-io,并尝试与节点交谈。 它工作正常,但不是我从localhost:5000更改为example.org如下所示: .factory('socket',function(socketFactory){ //working var myIoSocket = io.connect('http://localhost:5000'); //not working var myIoSocket = io.connect('http://example.org:5000'); mySocket = socketFactory({ ioSocket: myIoSocket }); return mySocket; }) 我在我的控制台中得到了这个错误 XMLHttpRequest cannot load http://example.com:5000/socket.io/?EIO=3&transport=polling&t=LIGH5VO. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:8100' is therefore not allowed access. The credentials mode of […]

Nodejs会话pipe理与java服务器会话pipe理相比较

考虑一个类似tomcat的Java web应用程序,它处理sessions 。 sessions存储在内存中(并且可以在服务器重启时serialized到硬盘)。 对于不能自行处理会话的nodejs应用程序,可以使用https://github.com/expressjs/session托pipe的一些名为expressjs/session库来开发会话。 在查看expressjs/session文档时,您会看到以下警告: 警告:默认的服务器端会话存储器MemoryStore故意不是为生产环境而devise的。 它会在大多数情况下泄漏内存,不会通过单个进程扩展,而是用于debugging和开发。 对我来说,将会话存储在内存中是目前在java web应用程序中所做的,没有任何问题。 现在我的问题是: 在会话中存储会话是一个不好的做法?! 如果在服务器重新启动期间失去会话并且性能不是我所关心的(因为我的应用程序规模),将会话存储在内存中仍然是nodejs不好的做法? (请参阅会话存储的用途是什么? )

在Nodejs中使用正则expression式停止stream

我正在尝试从另一个问题的正则expression式:正则expression式只接受字母数字,除了在中间的一个连字符 我有这个代码作为我的用户名validation的一部分: … var re = /^(?:[a-z0-9]{6,20}|(?=.{10,21}$)[a-z0-9]+-[a-z0-9]+)$/i; var found = username.match(re).length; … 但是如果用户名无效,stream程停止在这里,并且不会继续过去。 我需要能够问: if(username fails regex) { send error back to client }

client-sessions nodejs / Express – 错误:无法设置未定义的属性“mydata”

我试图在nodejs / Express中使用客户端会话中间件,并且出现以下错误: Cannot set property 'mydata' of undefined. 我也看了这个post,但是找不到更多的线索,为什么我可能会得到这个错误。 节点-JS-客户端会话而不是创造-REQ会话 var bodyParser = require('body-parser'); const express = require('express'); const app = express(); const clientSessions = require("client-sessions"); var urlencodedParser = bodyParser.urlencoded({ extended: false }); var router = express.Router(); app.use(clientSessions({ cookieName: 'mydata', // cookie name dictates the key name added to the request object secret: 'longsecretkeyorwhatever', […]

快递会保持多久?

我有一个基于节点的项目如下: "express": "~4.13.1", "express-sequelize-session": "^0.4.0", "express-session": "^1.12.1" 由于我对db行数量有严格的限制,可能主要关心的是:会话存储在db中的时间有多长,有没有办法修改这些限制?

即使JSON数据在MongoDB上持久化,nodeJS方法也会报错

我是nodeJS和mongoDB的新手。 使用nodeJS作为中间件创build应用程序,使用mongoDB作为数据库,使用UI中的angularJS。 在nodeJS中有控制器和模型到业务逻辑以及保存数据。 目前,即使在对象插入数据库(从模型)后,控制器也会遇到错误。 控制器代码如下: router.post("/add", function(req,res){ var student = req.body; Students.add(student, function(err) { if (err) { throw err; } var respOut = JSON.stringify({id:student.id}); console.log("respOut"); res.send(respOut); }); }); 型号代码: exports.add = function(student, cb) { var collection = db.get().collection('students'); collection.insert(student, function(err) { if (err) { throw err; } console.log("Record added"); }); } 在UI端使用下面的angularJS代码将数据提交给nodeJS控制器: mainApp.controller("addStudentController", function($scope,$http) { […]

使用Redis存储的快速会话无法创build会话

我将Redis Express 4.13.1用作会话存储。 app.use(session({ store: new RedisStore, secret: '…', resave: false, saveUninitialized: true })); 它起初工作,但它不起作用(升级后的node.js)。 使用默认存储(内存)工作正常,但使用RedisStore,会话不会被创build。 这是创build会话的代码: router.post('/admin/login', (req, res, next) => { Auth.compare(…, () => { req.session.authorized = true; req.session.userId = id; console.log(req.session); // It prints well. Session is created res.redirect('/admin/main'); }); }); 那一刻,会议改变了: Session { cookie: { path: '/', _expires: null, originalMaxAge: null, […]