Tag: expression

AngularJS html5mode重新加载页面

我有两个单独的应用程序: AngularJS客户端工作在http:// localhost:8080 工作在http:// localhost:3000上的NodeJS API服务器 NodeJS API服务器只是给客户端提供json数据(并不提供任何html页面)。 因此,为了让客户端能够与服务器通信,我在API服务器上启用了CORS技术。 app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); next(); }); 另外我想使用干净的URL没有#符号,所以我启用我的AngularJS应用程序中的html5mode function config($stateProvider, $urlRouterProvider, $locationProvider) { $locationProvider.html5Mode(true); $urlRouterProvider.otherwise('/login'); … — index.html的 <!doctype html> <html lang="en" ng-app="app"> <head> <base href="/"> <title>APP</title> <link rel="stylesheet" href="css/normalize.css"> <link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/fontello.css"> </head> <body> […]

节点并发/快速请求生命周期/可能的竞争状态?

我正在构build一个多租户Node应用程序,租户通过查询string进行标识。 我也有一个API客户端,基于该网站进行身份validation(oauth)请求。 我的问题是,我是否可以保持API客户端作为一个单身的对象,只是更新其中的会话 – 是否会遇到竞争条件,因为另一个请求进来,同时我进行asynchronous与客户的操作。 const session = new Session({ apiKey: 'xxx', secret: 'xxx' }) const client = new Client({ session }) app.use((req, res, next)=> { res.locals.client = client; next() }) app.use((req, res, next)=> { let { client, db } = res.locals; if (req.query.tenant) { return db.Tenant.findOne({ tenant: req.query.tenant }) .then((tenant)=> { client.updateSession({ access_token: tenant […]

fs.writefile只能在节点js的最后一个函数中执行

我的程序有三个function如下所示, var userId = req.userId; var appId = req.body.appId; var main = 'temp/' + userId + '/templates/' + appId + '/css/main.css'; var color = req.body.color; var font = req.body.font; var fontSize = req.body.fontSize; replaceThemecolor(color); replaceFont(font); replaceFontSize(fontSize); function replaceThemecolor(color) { fs.readFile(main, 'utf-8', function (err, data) { var regex =/(\.made-easy-themeColor\s*{[^}]*color\s*:\s*)([^\n;}]+)([\s*;}])/; var result = data.replace(regex, "$1" + color […]

在Express中设置默认的响应标题

我正在一个运行在MEAN堆栈上的小应用程序,并且遇到了一个烦人的障碍:我的后端应用程序(Node with Express )在http://localhost:3000 ,工作正常,但是我的前端客户端应用程序Javascript与AngularJS)运行在http://localhost:8000 ,这意味着从Angular发送的请求将被接收并作出响应,但一旦到达,就会被拒绝,因为它们被解释为来自不同的来源。 我能够用相对较less的戏剧来解决这个问题,通过使我的“展示我所有的东西”的方法看起来像这样: exports.index = function(req, res) { Region.find({}, function(err, docs) { if(!err) { res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8000'); res.json(200, { regions: docs }); } else { res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8000'); res.json(500, { message: err }); } }); } res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8000'); 行是我添加的告诉浏览器可以接受的反应,并停止打扰我; 现在的问题是,我必须将这个愚蠢的行添加到从任何地方发送的每一个响应中,并且我确信我必须错过某种方法来更改默认标题以永远包括Access-Control-Allow-Origin条目。 在一个完美的世界里,我可以根据代码被执行的环境来打开和closures,但是我完全可以在app.js中定义一个代码块,我至less可以删除一个代码块试图追踪res.setHeader 75个实例。 我认为必须有一种方法来改变隐藏在其基础之后的.json方法,但是文档并没有提供任何有关如何做到这一点的信息,更不用说它是否是一个可怕的想法。 有什么想法吗? 编辑 我认为(如所build议的那样) configuration应用程序级中间件是关键。 以下是我添加到我的app.js文件中的代码: // allow CORS: app.use(function (req, […]

Expressjs多个线程

在nodejs上可以有多个线程? 我正在使用expressjs和multer进行图片上传。 当图片尺寸较大,网页需要另外一个要求完成时,等待图片上传。 有可能使图像上传使用其他线程?

Oracle – search文本 – 检索结果的片段

我目前在Node JS Express和Oracle中构build一个简单的search页面。 我想向用户显示匹配文本的片段(第一个实例会这样做),以添加SQL所find的位的上下文。 例: search词: 'fish' 结果: 亨利真的很喜欢去钓鱼 ,一旦他注意到… 我不确定最好的方式来处理这个问题 – 我可以检索整个文本块,并在Node JS中执行,但我不太喜欢将整个文本拖到应用程序的想法,只是为了得到片段。 我一直在想, REGEXP_SUBSTR可以做到这一点…但我不确定是否可以使用正则expression式来检索匹配的单词之前和之后的x个字符。 我有没有正确的想法,还是以错误的方式去解决? 谢谢 SELECT text , REGEXP_SUBSTR(LOWER(text), LOWER('fish')) AS potential_snippet FROM table WHERE LOWER(text) LIKE LOWER('%fish%');

Node.js / Express – 在哪里把MySQL连接?

我正在学习如何使用node.js连接到我的第一个快速Web应用程序的mysql数据库: http : //expressjs.com/guide/database-integration.html#mysql 我在哪里把这个代码放在我刚生成的Express应用程序中? 我只是把它放在app.js文件中? 在我看来,如果我把它放在app.js中,那么对于所有未来的web请求,查询数据都将停滞不前。 如果每个Web请求都必须有来自数据库的当前数据,我应该在哪里放这个代码? 对不起,我已经写了其他的node.js应用程序,但是我把它作为一个web服务器来使用,而且我完全是新的expression方式。 我很感激任何有关在什么地方放置东西的指导。

等待来自不同模块的多个事件,然后启动服务器

我正在构build一个应用程序,其中有两个不同的模块。其中一个是连接到mongodb,另一个模块是连接到redis进行会话pipe理。 在这种情况下,每个模块有2个事件错误和连接。 以下是其中一个模块的示例: var sessionStore = new SessionStore(app.get("sessionStore")); sessionStore.client.on("error", function(err) { console.error("[SessionStore]:", "connection error:", err.address + ":" + err.port, "for process:", process.pid); var sessionStoreError = new Error("Session store error"); sessionStoreError.message = "Session store connection error"; sessionStoreError.code = err.code; sessionStoreError.address = err.address; sessionStoreError.port = err.port; app.emit("error", sessionStoreError); }); sessionStore.client.on("connect", function() { console.log("[SessionStore]:", "connection established:", app.get("sessionStore").host + […]

我怎样才能在JSON中安全地使用用户提供的文本?

我有一个Node应用程序需要用户input(一个用户名和密码),并提出请求到另一个API与这两件事情包括在内。 我有一个function,应该这样做: getTokenFromLogin = function(user, pass) { var promise = new Promise(function(resolve, reject) { var options = this.options; options.url = endpoints.login; options.method = 'POST'; options.form = { 'username': user, 'password': pass }; request(options, function (err, httpResponse, body) { if (err) return reject(err); resolve(body); }); }); return promise; }; 然而,从理论上讲,攻击者不能只是input一个JSON格式的string来处理我的请求对象呢? 如果是这种情况,我如何确保这些string是安全的? 我已经看到了两个方法,JSON.parse()和JSON.stringify(),但我没有发现什么澄清我应该使用什么,以及如何这些方法可以阻止这种types的漏洞。

如何在express.js中启用会话

我有node.js 5.1.1和express.js 4.13.3。 我读了一本书,并说为了启用快速会话,您必须在启动一个新项目时执行express -e -s nameOfYourProject 。 但是,这本书有点老了,我得到error: inknow option '-s' 。 这本书的例子,像这样使用会话, var sess = this.req.session; 。 整个章节是关于注册和login。 那么,如何启用会话? 我必须安装一个模块,还是默认启用?