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

5 篇文章 0 订阅
4 篇文章 0 订阅

前面对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中添加上这两句就行了。

结果如下图:
这里写图片描述

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值