定义

Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行的数据密集型的实时应用。

MongoDB是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

环境安装:基于Mac OS X系统

nodejs的安装非常简单,去官网下载安装文件进行安装即可,同时自带了npm(node package manager)工具。

mongodb的安装稍微有点复杂,需要用到homebrew。homebrew 简称brew,是Mac OS X上的软件包管理工具,以最简单和灵活的方式,在 Mac OS X 安装 linux 工具包。

第一次安装homebrew,打开终端,输入以下命令

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果以前安装过homebrew,记得更新homebrew

brew update

安装mongodb

brew install mongodb

创建数据存放目录

mkdir -p /data/db

运行mongodb

mongod

出现异常:文件夹目录拒绝访问,权限不够。

2015-12-05T10:12:49.585+0800 I STORAGE  [initandlisten] exception in initAndListen: 98 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
 2015-12-05T10:12:49.586+0800 I CONTROL  [initandlisten] dbexit:  rc: 100

解决方法:需要手动将文件夹的权限设置为读和写。选中文件夹data、db,快捷键command+opition+i,弹出文件夹的简介,修改其中everyone的权限为读和写。

启动mongodb后台管理

mongo

出现异常:不能连接mongodb,连接失败。

MongoDB shell version: 3.0.7
connecting to: test
2015-12-05T11:24:01.021+0800 W NETWORK  Failed to connect to 127.0.0.1:27017, reason: errno:61 Connection refused
2015-12-05T11:24:01.025+0800 E QUERY    Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
    at connect (src/mongo/shell/mongo.js:179:14)
    at (connect):1:6 at src/mongo/shell/mongo.js:179
exception: connect failed

原因:Mac OS X系统没有自启动mongodb服务。

brew services start mongodb

国内的问答社区,解决不了问题。只能访问:来自stackoverflow的问答。缺点是:国内的访问速度有点慢,甚至打不开。

如何在windows中添加mongodb服务

mongod --dbpath "C:\data\db" --logpath "C:\data\log\MongoDB.log" --install --serviceName "MongoDB"

nodejs如何访问mongodb数据库?

首先得通过npm安装mongoose模块。

$npm install mongoose

mongoose是为nodejs而生的mongodb对象建模工具,可以定义一些Schema(定义每个doc里的字段名、类型、初始值、验证条件等),增删改查等,功能比较强大。

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var Cat = mongoose.model('Cat', {
    name: String
});
var kitty = new Cat({
    name: 'Zildjian'
});
kitty.save(function(err) {
    if (err) // ...
    console.log('meow');
});

如上面的示例,运用.save的方法,就可以将kitty的数据保存到本地test的数据表。

项目开发
后端框架
前后端交互
路由
配置文件

Grunt:JavaScript 世界的构建工具。对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,自动化工具可以减轻你的劳动,简化你的工作。

运行Grunt构建工具需要依赖以下两个文件:

  • package.json
  • Gruntfile.js。
// 初始化生成package.json
npm init
// 安装grunt至package.json中的devDependencies内
npm install grunt --save-dev
// 安装需要支持的第三方grunt插件
npm install grunt-contrib-uglify grunt-contrib-concat
// 新建Gruntfile.js
touch Gruntfile.js

如果在npm install安装过程中,如果安装过程一直在等待,那就是访问国外网站不稳定的问题,可以使用国内淘宝NPM镜像!

//使用淘宝定制的 cnpm  命令行工具代替默认的 npm:
npm install -g cnpm --registry=https://registry.npm.taobao.org

常用的插件:

  • 实现监控:grunt-contrib-watch
  • 语法检查:grunt-contrib-jshint
  • 压缩:grunt-contrib-uglify
  • 合并:grunt-contrib-concat
  • 编译less:grunt-contrib-less
  • 编译jade:grunt-contrib-jade
  • 同时运行多个任务:grunt-contrib-concurrent

Gruntfile文件的组成部分:

  1. “wrapper”函数:module.exports=function(grunt){}
  2. 项目与任务配置:grunt.initConfig
  3. 加载grunt插件和任务:grunt.loadNpmTasks
  4. 自定义任务

下面我们来配置一个实时编译jade和less的Gruntfile文件,代码如下:

module.exports = function(grunt) {
  // 项目与任务配置
  grunt.initConfig({
    watch: {
      html: {
        files: ['main.jade'],
        tasks: ['jade'],
        options: {
          livereload: true
        }
      },
      css: {
        files: ['less/main.less'],
        tasks: ['less'],
        options: {
          livereload: true
        }
      },
      less:{
          files: ['less/*.less']
      }
    },
    less: {
      development: {
        options: {
          compress: false,
          optimization: 2
        },
        files: {
          'css/main.css': 'less/main.less'
        }
      }
    },
    jade: {
      development: {
        options: {
          pretty: true
        },
        files: {
          'main.html': 'main.jade'
        }
      }
    },    
    concurrent: {
      tasks: ['watch', 'jade', 'less'],
      options: {
        logConcurrentOutput: true
      }
    }
  })
  // 加载grunt插件和任务
  grunt.loadNpmTasks('grunt-contrib-watch')  
  grunt.loadNpmTasks('grunt-contrib-jade')
  grunt.loadNpmTasks('grunt-contrib-less')
  grunt.loadNpmTasks('grunt-concurrent')
  // 注册自定义的grunt任务
  grunt.registerTask('default', ['concurrent'])
}

小结:把机械化重复性的工作,交给机器去做。使用自动化工具可以减轻你的劳动,简化你的工作。

Git:是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

基本的Git工作流程

  1. 在工作目录中修改文件
  2. 暂存文件,将文件的快照放入暂存区域
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录

常用的指令

// 克隆现有的仓库
git clone
// 初始化仓库
git init
// 检查当前文件状态
git status
// 暂存已修改的文件
git add
// 查看已暂存和未暂存的修改
git diff
// 提交更新
git commit -m
// 跳过使用暂存区域
git commit -a -m
// 查看提交历史
git log
// 远程更新
git push

把项目搬进GitHub

首先在github官网新增一个仓库,仓库名如:xiangrenya.com。

git clone https://github.com/leon0407/xiangrenya.com.git
git init
git add .
git commit -m 'first commit'
git push

小结:遇到命令不清楚的时候,可以使用git help,查看相关帮助,一般都能解决问题。