使用express创建自己第一个nodejs程序

前面对nodejs做了一些了解,这次我们来学习基于nodejs的非常流行的web框架express。
1. 第一步先安装express-generator
express-generator可以安装express框架的工程模板生成一个项目。

sudo npm install express-generator -g

-g将这个模块安装到全局模块。
2. 新建一个app
使用express新建一个工程名为myapp的express项目。

express myapp
create : myapp
   create : myapp/package.json
   create : myapp/app.js
   create : myapp/public
   create : myapp/public/javascripts
   create : myapp/public/images
   create : myapp/public/stylesheets
   create : myapp/public/stylesheets/style.css
   create : myapp/routes
   create : myapp/routes/index.js
   create : myapp/routes/users.js
   create : myapp/views
   create : myapp/views/index.jade
   create : myapp/views/layout.jade
   create : myapp/views/error.jade
   create : myapp/bin
   create : myapp/bin/www

其会为我们生产一个文件。app.js是app入口文件,public文件夹下放置static文件,views为模板目录,routes为路由规则目录。
3. 安装依赖
express依赖与其他的模块,生产express功能目录的时候,只是将这些依赖写到了package.json文件中,我们还需要安装这些模块。
在myapp目录下,执行下面命令

    npm install

可以会报:npm ERR! Please try running this command again as root/Administrator.

这是使用sudo npm install
输入如下的安装log

jade@1.11.0 node_modules/jade
├── character-parser@1.2.1
├── void-elements@2.0.1
├── commander@2.6.0
├── mkdirp@0.5.1 (minimist@0.0.8)
├── jstransformer@0.0.2 (is-promise@2.1.0, promise@6.1.0)
├── with@4.0.3 (acorn@1.2.2, acorn-globals@1.0.6)
├── constantinople@3.0.2 (acorn@2.5.2)
├── uglify-js@2.5.0 (uglify-to-browserify@1.0.2, async@0.2.10, source-map@0.5.3, yargs@3.5.4)
├── transformers@2.1.0 (promise@2.0.0, css@1.0.8, uglify-js@2.2.5)
└── clean-css@3.4.6 (commander@2.8.1, source-map@0.4.4)
  1. 试运行我们的例子
DEBUG=myapp:* npm start

DEBUG指定了debug模式运行,而且level是all,即什么log都输出。
这是我们访问http://localhost:3000,就会看到express的默认页面。

  1. express处理流程
    学过设计模式的都应该知道责任链模式,就是在一个处理流程中,一个请求被顺序处理,在express每个责任人就是express文档中所说的中间件,文档http://www.expressjs.com.cn/,这个我就不细说了。
    我没做过web开发,所以对模板的具体使用方式不知道,但是在c++中,模板可以用类型来填充,我们小看了模板那张,web模板就是将数据拉出来,用一个标识替代,然后在render模板时,指定标识的值,然后输出为html给用户,这里我们就不深究这个。我们这个只是一个入门的教程。在web开发,资源是由url指定,而怎么组织url,那就是通过url路由来管理。express通过可挂在的路由句柄来实现各个路由的管理,同时也达到了通过路由来对源码组织进行管理。

  2. 添加自己的业务到myapp
    我们添加一个查看文章的功能。我们添加一个article的路由句柄。在routes目录下面新建一个article.js文件,来具体实现我们的业务罗辑。url为http://localhost:3000/article/id/xxxx,我们每个文章有一个id,一串数字,然后我们返回json数据。
    article.js文件内容如下:

var express = require('express');
var router = express.Router();


var db = require('mongoskin').db('mongodb://localhost:27017/express_demo', {native_parser:true});

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a article');
});

router.get(/^\/id\/(\d+)$/, function(req, res, next) {
        var article_id = req.params[0];
        db.collection('article').findOne({id: parseInt(article_id)}, function(err, result) {
                if (err) {
                        next(err);
                }
                res.send(result);
        });
});

module.exports = router;

我连接上我本地的mongodb数据库中的express_demo数据库,当我们输入http://localhost:27017/article/id/1,就会调用

router.get(/^\/id\/(\d+)$/, function(req, res, next) {
        var article_id = req.params[0];
        db.collection('article').findOne({id: parseInt(article_id)}, function(err, result) {
                if (err) {
                        next(err);
                }
                res.send(result);
        });
});

来处理,我们使用了正则来匹配url,我们使用()来提取出我们的id参数。我在express_demo数据库中的article文档中加了两条数据,格式

{
    "id":xx,
    "title":"xxx",
    "content":"xxx"
}

在操作数据库时我们使用了mongoskin这个操作mongodb的模块,在myapp目录下执行npm install mongoskin进行安装。

我们的id是唯一,所以我们使用了findOne,传入{id:xx}为参数,article_id是一个string,需要parseInt转换成int,不然我们传入的就是{id:'xxx'},和我们的scheme是不匹配的。我们已经完成了我们的路由句柄,我们将它挂在在我们的路由路径上。

var article = require('./routes/article.js');
app.use('/article', article);

在app.js中添加上这两句就行了。

结果如下图:
使用express创建自己第一个nodejs程序_第1张图片

当然这只是一个简单的demo小程序。

你可能感兴趣的:(mongoDB,nodejs,express)