小编CLD*_*Dev的帖子

Express中的多个可选路由参数?

我正在使用Express来处理格式为的路线/articles/:year/:month/:day,其中年,月和日是可选的.

  • 如果没有给出三个参数,则所有文章都将被退回;
  • 如果给予年份,则返回当年的文章;
  • 如果给出年份和月份,则返回该年份和月份的文章;
  • 如果给出所有三个参数,将返回该年,月和日的文章.

我的问题是,如何让它们成为可选项?根据我定义的当前路线,除非存在所有三个参数,否则它将无法解析并将落入默认路线.

routing node.js express

34
推荐指数
2
解决办法
3万
查看次数

NodeJS比PHP慢得多?

我目前在Apache + PHP + MySQL下运行一个小规模的Web服务器,并希望探索使用NodeJS的选项.服务器实际上做了两件事:

  1. 提供一些静态文件(HTML/CSS /图像资源等)
  2. 查询数据库(仅选择和插入,不更新或删除)

但是,我遇到了一些性能问题,我正在试图找出问题所在.为了解决问题,我创建了一个最小的NodeJS应用程序,它运行针对MySQL的查询并返回50行数据作为JSON.以下是我的代码:

var express = require('express');
var compression = require('compression');
var mysql = require('mysql');

var db = mysql.createPool({
    host: <host>,
    user: <user>,
    password: <password>,
    database: <database>,
    debug: false
});

var app = express();
app.use(compression());

app.get('/data', function(req, res) {
    var sql = 'SELECT column_1, column_2 FROM table';
    db.query(sql, function (error, rows, fields) {
        if (error) throw error;
        res.json(rows);
    });
});

app.listen(3000, function () {
  console.log("Running on port 3000.");
});
Run Code Online (Sandbox Code Playgroud)

通过使用ApacheBench以并发级别1触发1000个请求(为了不使单线程Node应用程序不利),结果如下:

Concurrency Level:      1
Time …
Run Code Online (Sandbox Code Playgroud)

php mysql apache performance node.js

13
推荐指数
1
解决办法
1297
查看次数

UI-Router - 状态变化时范围没有被破坏?

我是AngularJS和ui-router的新用户,我正在试图调整范围的管理方式.我期望当状态改变变为非活动状态时,活动控制器的范围将被销毁,但是,似乎并非如此.

我已经从UI-Router的网站修改了这个例子来说明情况(参见下面的plunker).每次触发state route1.list/route2.list时,它们都会在$ rootScope上发出一个事件.收到事件后,将在控制台上打印调试语句.

通过在两个状态之间切换几次,观察到先前初始化的所有控制器都响应该事件.所以看来它们创建的范围从未被破坏过.这种行为有望吗?如果是这样,我该怎么办才能让只有主动控制器响应一个事件?

Plunker

在控制台上打印调试消息: 在此输入图像描述

码:

var myapp = angular.module('myapp', ["ui.router"])
myapp.config(function($stateProvider, $urlRouterProvider){

// For any unmatched url, send to /route1
$urlRouterProvider.otherwise("/route1")
Run Code Online (Sandbox Code Playgroud)

这是route1

$stateProvider
  .state('route1', {
      url: "/route1",
      templateUrl: "route1.html"
  })
    .state('route1.list', {
        url: "/list",
        templateUrl: "route1.list.html",
        controller: function($rootScope, $scope){
          $rootScope.$emit("eventCT1");
          $rootScope.$on("eventCT2", fn);
          function fn () {
            console.log("Controller 1 receives an event emitted by Controller 2");
          }
          $scope.items = ["A", "List", "Of", "Items"];
        }
    })
Run Code Online (Sandbox Code Playgroud)

这是路线2

  .state('route2', {
      url: "/route2",
      templateUrl: "route2.html"
  })
    .state('route2.list', {
        url: "/list",
        templateUrl: …
Run Code Online (Sandbox Code Playgroud)

state angularjs angular-ui angular-ui-router

8
推荐指数
1
解决办法
7512
查看次数

sessionStorage 在 Android 上意外清理

我有一个网站将字符串化的 JavaScript 对象保存到 sessionStorage 中。它在桌面浏览器上运行良好 - 根据 MDN 上的描述,数据在页面重新加载后仍然存在。

在 Android 手机上,当用户从另一个选项卡切换回或浏览器从后台返回前台时重新加载选项卡的情况并不少见,我希望 sessionStorage 将持续存在。然而,情况似乎并非如此。sessionStorage 消失了,就像创建了一个新会话一样。

我想过使用localStorage,即使会话关闭它也不会过期。尽管如此,它并没有真正解决我所有的问题 - 因为我希望用户可以在多个选项卡上多次打开它,并在每个选项卡上做不同的事情。

所以我的问题是:

  1. 上面描述的 sessionStorage 行为是否符合预期?如果不是,我可以做些什么来纠正它?
  2. 如果行为符合预期,并且我必须依赖 localStorage,我如何识别为每个单独选项卡存储的对象?

在此先感谢您的帮助!

javascript mobile android session-storage web

6
推荐指数
1
解决办法
1731
查看次数

使用 Express 将元标记动态注入 HTML

概括:

我目前正在将 Apache + PHP 堆栈上的网站迁移到 Node + Express,并且想知道在新堆栈下动态注入元标记的最佳方法/最佳实践(如果有的话)是什么。

细节:

在现有堆栈下,通过直接将 PHP 代码添加到 HTML 文件中来动态注入元标记。由于渲染是在服务器端完成的,因此 Facebook/Google+/任何网络爬虫都会正确解释标签。

在新的堆栈下,经过一些研究后,我遇到了两种选择:

  1. 使用 Pug (Jade) 等模板引擎用局部变量渲染 HTML。(不过,用 Pug 的语法重写现有的 HTML 似乎有些过分了?Pug 可以处理 HTML,还是我必须考虑其他模板引擎,如 EJS?您建议我探索什么模板引擎?)
  2. 在渲染开始之前,首先使用 Cheerio 等 DOM 操作插件注入元标记。

在这两种选择之间,哪一种具有更好的性能或者没有实质性差异?您还有其他推荐的方法吗?谢谢!

template-engine node.js express cheerio pug

5
推荐指数
1
解决办法
4106
查看次数