mongoose-让node.js更优雅的操作mongodb

之前做基于node.js和mongodb的项目一直是用mongoskin这个数据库访问层。
不过功能太少了,小项目用用还可以,代码量到了一定程度之后就有些力不从心了。
还是打算换个数据库访问层来用用,换什么?当然是最流行的mongoose。

mongoose介绍

Mongoose是MongoDB的一个对象模型工具,既类似ORM,让node.js操作mongodb更加方便。
Alt node.js

mongoose安装

$ npm install mongoose

mongoose学习笔记

连接数据库

var mongoose =  require('mongoose');
mongoose.connect("mongodb://ykq:123456@localhost:27017/test");

定义Schema
这里Schema理解为数据库模型骨架,首先定义Schema,后面再由Schema生成模型。

var UserSchema = new Schema({
    username : { type: String, default: '' ,trim : true},
    password : { type: String, default: '' ,trim : true},
    email: { type: String, default: '' }
},{collection: 'user'});

Schema结构体中采用key-value形式,key代表数据库字段,value代表类型及其他设置。
允许的Schema类型有:

  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed
  • ObjectId
  • Array

创建模型Model

var User = mongoose.model('User', UserSchema);

创建完模型即可对数据库进行增删改查了:

添加一条数据

var u= new User({username:"test",password:"123456",email:"123@qq.com"});
u.save(function(err){});

删除一条数据

User.remove({ username: 'test' }, function (err) {
});

修改一条数据

User.update({ username: 'test' }, { email: '456@qq.com' }, { multi: true }, function (err, numberAffected, raw) {
});

查询一条数据 ,mongoose查询支持链式操作:

User
.find({ username: 'test' })
.limit(10)
.select('username email')
.exec(callback);

总结:

mongoose确实是一个很棒的node.js模块,使用它能让你的代码量减少,代码结构更加整洁、整齐。
建议实际项目中为每一张表创建一个模型文件,将定义模型、数据验证、数据操作都封装在这个模型里,然后通过控制层来调用这个模型来完成数据的操作。
除了上面的学习笔记,mongoose还有包括数据验证、中间件、插件等功能,这里就先不多说了。
官方文档:http://mongoosejs.com

使用PHP获取所有的汉字

1
2
3
4
5
6
<?php
header('Content-Type: text/html;charset=utf8');
$start = hexdec('4e00'); $end = hexdec('9fa5');
for($i=$start; $i<$end; $i++) {
print_r(json_decode('["\u'.dechex($i).'"]'));
}

4e00为汉字十六进制的下界,9fa5为汉字十六进制的上界,我们遍历每一个汉字的十六进制对应得十进制码,然后再通过json_decode解码得到最终的汉字。

强大的Web包管理工具-bower

强大的Web包管理工具-bower

前言

每当我们开始一个新的web前端项目,我们做个第一件事都是去下载相应的js类库文件。
如我们项目要用到Jquery,我们就要去Jquery的官网下载Jquery库。
接着若我们的前端UI要用到Bootstrap,我们还要去Bootstrap的官网下载Bootstrap,而最新的Bootstrap3需要Jquery1.9以上的支持,我们不得不又要检查Jquery的版本是否合适,不合适的话要重新下载。
甚至复杂一点的angular.js的项目我们可能要依赖angular的一些模块:angular-route、angular-animate等。
像angular-route.js这个路由模块在angular1.2之前是内置于angular的,而angular1.2之后是从angular分离出来的(上次升级angular被坑了2小时。。)。
我去,这些问题想想都头疼。这时候我们需要一个工具来管理这些库及其依赖。

bower介绍

bower是twitter推出的一款web软件包管理工具,使用nodejs开发,开源。
提供添加新web包,更新web包,删除web包,发布web包,管理包依赖等功能。

bower安装dd

bower的安装是通过node.js的npm管理工具来安装的 :

$ npm install -g bower

bower命令

安装完成后,我们可以通过bower –help来查看bower有什么命令
Alt ddd
各命令说明:

  • cache : bower缓存管理
  • help : 显示Bower命令的帮助信息
  • home : 通过浏览器打开一个包的github发布页
  • info : 查看包的信息
  • init : 创建bower.json文件
  • install : 安装包到项目
  • link : 在本地bower库建立一个项目链接
  • list : 列出项目已安装的包
  • lookup : 根据包名查询包的URL
  • prune : 删除项目无关的包
  • register : 注册一个包
  • search : 搜索包
  • update : 更新项目的包
  • uninstall : 删除项目的包

bower使用

使用bower来安装包及依赖:

bower install – 根据bower.json配置文件来安装web包。
bower install – 根据包名称来安装web包,默认安装最新版。
bower install # – 安装该版本的web包,#号好后跟版本号。
bower install =# – 使用别名安装该版本的web包。

使用bower来安装bootstrap :

$ cd /www/test    
$ bower install bootstrap

执行以上命令自动安装bootstrap框架及它所依赖的最新版的Jquery。

通过bower list –path 你可以得到每个类库的路径名称映射。
Alt bower
这样就能再项目中使用对应的类库了。

<script src="bower_components/jquery/jquery.js"></script>

其他命令的使用:
还有其他命令用法也基本大同小异:
如bower update jquery 更新jquery包。 bower uninstall jquery 删除jquery包。
这里就不多说了大家动手敲一遍就会了。

使用Composer来管理PHP的依赖包

如今有大量的PHP函数库、框架和组件可供选择,一个项目中可能会使用其中的若干——这就是项目的依赖。到目前为止,PHP还没有有效的 项目依赖管理方案。即使你手工的管理它们,你还不得不处理它们的自动加载问题。

Composer 是PHP(5.3.2+)中用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer会帮你安装这些依赖的库文件,并配置好自动加载路径。

全局安装Composer (环境为mac OSX 10.8.4)

1
2
3
$ curl -sS https://getcomposer.org/installer | /usr/app/php5.3/bin/php  
$ mv composer.phar /usr/local/bin/composer
$ composer

如何定义和安装依赖

首先,在项目所在目录创建文件composer.json,下面是一个依赖Twig例子:

1
2
3
4
5
{    
"require":{
"twig/twig": "1.8.*"
}
}

第二步:在项目根目录运行:

$ composer install

这会在vendors/下载和安装项目依赖。最后在应用的PHP入口文件添加下面代码,告诉PHP使用Composer自动加载器加载项目的依赖库:

<?php require 'vendor/autoload.php';

现在你就可以使用项目依赖的库了,它们会在需要的时候自动加载。

最后,使用composer安装我最喜欢的laravel框架

1.从github下载laravel框架
2.解压laravel到网站根目录并执行composer install来安装。

$ cd /usr/app/laravel && composer install
  1. 在浏览器输入http://127.0.0.1 检测安装是否成功

Atl laravel

使用gruntJs构建javascript项目

gruntJs,一个专为JavaScript提供的自动化项目构建工具。. 如果你需要重复的执行像压缩, 编译, 单元测试, 代码检查以及打包发布的任务. 那么你可以使用Grunt来处理这些任务, 你所需要做的只是配置好Grunt, 这样能很大程度的简化你的工作.

官网 : http://gruntjs.com/
github : https://github.com/gruntjs/grunt

安装grunt

$ npm install -g grunt-cli  
$ npm install -g grunt

恩,你没看错。通过npm(Node Package Manager)只需要2条命令就完成了grunt的安装。

在项目中使用grunt

想要在项目中使用grunt,首先需要往项目里添加两个文件:package.json和Gruntfile.js
package.json:该文件用来为npm存放项目配置的元数据,基于Packages/1.1 规范。
在这个文件里你可以定义你的应用名称( name )、应用描述( description )、应用依赖模块( dependencies )、开发环境依赖模块( devDependencies )等。
如:

{
    "name": "hello world",
    "author": "ykq",
    "homepage": "http://iscript.github.io", 
     "dependencies": { 
         "express": "latest" 
     }, 
     "devDependencies": { 
         "grunt": "latest", 
         "grunt-contrib-uglify": "latest", 
     } 
}

接着在项目目录下执行npm install即可根据package.json安装项目所需的依赖。

Gruntfile.js:这个文件就是grunt的配置了,其中详细定义了每个任务的细节和执行任务的顺序等。

module.exports = function(grunt) {
grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    //压缩任务
    uglify : {
        options : {
        banner : '/*! <%= pkg.name %> */\n'
        },
        build : { src : 'app.js',dest : 'app.min.js'} 
    } 
}); 
//加载grunt需要的插件: 
grunt.loadNpmTasks('grunt-contrib-uglify'); 

//告诉grunt该怎么执行这些任务: 
grunt.registerTask('default', ['uglify']); 
};

上面这段代码就是通过grunt来执行一个简单的压缩任务。
在项目所在目录,命令行输入grunt即可将app.js压缩成app.min.js。

grunt插件

grunt只是一个自动化管理工具,不管是安装或配置都不复杂,复杂度源于成百上千的第三方插件。
常用插件:

  • grunt-contrib-uglify :压缩js代码
  • grunt-contrib-concat :合并js文件
  • grunt-contrib-qunit :单元测试
  • grunt-contrib-jshint :js代码检查
  • grunt-contrib-watch :监控文件修改并重新执行注册的任务

官方插件清单:http://gruntjs.com/plugins

使用ng-Boilerplate来通过grunt完美构建AngularJs项目

https://github.com/ngbp/ng-boilerplate