从零开始搭建一个Node服务

需求

*  *为自己的移动端项目PositivePersons搭建完整的Node服务。

用到的工具

实现步骤

安装Node.js

  1. 三种安装方式
  • 通过安装包安装。
  • 通过源码编译安装。
  • 在 Linux 下可以通过 yum|apt-get 安装,在 Mac 下可以通过 Homebrew 安装。
  1. 测试安装结果
    1
    2
    $ node -v
    $ npm -v

关联Git

由于代码要放在GitHub,所以我在GitHub创建了一个仓库。

1
2
3
4
5
$ mkdir PositivePersonsNode
$ cd PositivePersonsNode
$ git init
$ git remote add ppsnode https://github.com/YAANNZ/PositivePersonsNode.git
$ git pull ppsnode master

初始化express

1
2
$ npm init    // 初始化一个空项目,npm init 有智能的默认选项
$ npm i express --save // 安装express并添加进依赖

创建程序入口

  • 新建 index.js 并打开
    1
    2
    $ touch index.js
    $ open -sublime index.js
  • 添加如下代码:
    1
    2
    3
    4
    5
    6
    7
    8
    const express = require('express')
    const app = express()

    app.get('/', function (req, res) {
    res.send('hello, express')
    })

    app.listen(3000)

安装supervisor

1
$ npm i -g supervisor

使用supervisor --harmony index.js启动程序,而不用node --harmony index.js。supervisor会监听当前目录下 node 和 js 后缀的文件,当文件发生改动时自动重启程序:

1
$ supervisor --harmony index.js    // 启动程序,访问localhost:3000,页面应显示 hello, express。

express.Router的使用

将所有路由控制函数都放在index.js并不是一个好的选择,这时就需要expres.Router的路由实现方案。

1
2
3
4
& mkdir routes
$ cd routes
& touch index.js
$ touch home.js

代码剥离:

  • index.js
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const express = require('express')
    const app = express()
    const indexRouter = require('./routes/index')
    const homeRouter = require('./routes/home')

    app.use('/', indexRouter)
    app.use('/home', homeRouter)

    app.listen(3000)
  • routes/index.js
    1
    2
    3
    4
    5
    6
    7
    8
    const express = require('express')
    const router = express.Router()

    router.get('/', function (req, res) {
    res.send('hello, this is root')
    })

    module.exports = router
  • routes/home.js
    1
    2
    3
    4
    5
    6
    7
    8
    const express = require('express')
    const router = express.Router()

    router.get('/', function (req, res) {
    res.send('hello, this is home')
    })

    module.exports = router

第一个完整的接口

修改 routes/home.js 文件:

1
2
3
4
5
6
7
8
9
10
11
12
const express = require('express')
const router = express.Router()
const fs = require('fs')

router.post('/allTasks', function (req, res) {
fs.readFile('./tempData/allTasks.json', function(err, data){
res.writeHead(200, {'Content-Type': 'text/html; charset=UTF-8'})
res.end(data)
})
})

module.exports = router

fs模块用于对系统文件及目录进行读写操作。模块中所有方法都有同步和异步两种形式。