我正在使用Express来处理格式为的路线/articles/:year/:month/:day,其中年,月和日是可选的.
我的问题是,如何让它们成为可选项?根据我定义的当前路线,除非存在所有三个参数,否则它将无法解析并将落入默认路线.
我目前在Apache + PHP + MySQL下运行一个小规模的Web服务器,并希望探索使用NodeJS的选项.服务器实际上做了两件事:
但是,我遇到了一些性能问题,我正在试图找出问题所在.为了解决问题,我创建了一个最小的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) 我是AngularJS和ui-router的新用户,我正在试图调整范围的管理方式.我期望当状态改变变为非活动状态时,活动控制器的范围将被销毁,但是,似乎并非如此.
我已经从UI-Router的网站修改了这个例子来说明情况(参见下面的plunker).每次触发state route1.list/route2.list时,它们都会在$ rootScope上发出一个事件.收到事件后,将在控制台上打印调试语句.
通过在两个状态之间切换几次,观察到先前初始化的所有控制器都响应该事件.所以看来它们创建的范围从未被破坏过.这种行为有望吗?如果是这样,我该怎么办才能让只有主动控制器响应一个事件?
码:
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) 我有一个网站将字符串化的 JavaScript 对象保存到 sessionStorage 中。它在桌面浏览器上运行良好 - 根据 MDN 上的描述,数据在页面重新加载后仍然存在。
在 Android 手机上,当用户从另一个选项卡切换回或浏览器从后台返回前台时重新加载选项卡的情况并不少见,我希望 sessionStorage 将持续存在。然而,情况似乎并非如此。sessionStorage 消失了,就像创建了一个新会话一样。
我想过使用localStorage,即使会话关闭它也不会过期。尽管如此,它并没有真正解决我所有的问题 - 因为我希望用户可以在多个选项卡上多次打开它,并在每个选项卡上做不同的事情。
所以我的问题是:
在此先感谢您的帮助!
概括:
我目前正在将 Apache + PHP 堆栈上的网站迁移到 Node + Express,并且想知道在新堆栈下动态注入元标记的最佳方法/最佳实践(如果有的话)是什么。
细节:
在现有堆栈下,通过直接将 PHP 代码添加到 HTML 文件中来动态注入元标记。由于渲染是在服务器端完成的,因此 Facebook/Google+/任何网络爬虫都会正确解释标签。
在新的堆栈下,经过一些研究后,我遇到了两种选择:
在这两种选择之间,哪一种具有更好的性能或者没有实质性差异?您还有其他推荐的方法吗?谢谢!