设为首页 收藏本站
云服务器等爆品抢先购,低至4.2元/月
查看: 605|回复: 0

[经验分享] NODEJS(5)Expressjs and CRUD

[复制链接]

尚未签到

发表于 2017-2-21 11:35:45 | 显示全部楼层 |阅读模式
  NODEJS(5)Expressjs and CRUD

1. Play with Expressjs
>npm -version
1.4.9

>grunt -version
grunt-cli v0.1.11

Check the latest expressJS
>npm info express version
npmhttpGEThttps://registry.npmjs.org/expressnpmhttp304https://registry.npmjs.org/express 4.2.0

Then I put package.json there as follow>

     "name": "hello", 
     "description": "first demo app", 
     "version": "0.0.1", 
     "private": true, 
     "dependencies": {   
          "express" : "4.2.0" 
     }
}

Use command to install all the dependency
>npm install

And >npm ls will list all the dependencies.

And the simplest app.js should be as follow>
var express = require('express');
var app = express();

app.get('/hello.txt', function(req, res){
     res.send('Hello Sillycat');
});

app.listen(3000);
console.log('Listening on port 3000');

And there a plenty of examples here
https://github.com/visionmedia/express/tree/master/examples

We can open the debug MODE
>DEBUG=express:* node app.js
https://github.com/visionmedia/debug

2. Using ExpressJS to build CRUD
>sudo npm install -g express
>sudo npm install -g express-generator
This will install some core Express functionality right into my Node installation.

Generate the Project
>express userlist
Or
>express —css stylus userlist

Go to that directory, >npm install will install all the dependencies.

Run the application will be as follow:
>DEBUG=userlist ./bin/www

Some key parts are as follow>
app.js Prepare the Monk Connection
// Mongodb Client Configuration
var mongo = require('mongodb’);
var monk = require('monk');
var db = monk('127.0.0.1:27010/userlist');

And Before we add the router, we need to expose  the db client to the req
// make db available
app.use(function(req,res,next){
    req.db = db;
    next();
});

app.use('/', indexs);
app.use('/users', users);

Here is the service/mapping/control part, index.js which control all the router and http Method Mapping.
var express = require('express');
var debug = require('debug')('http');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res) {
  res.render('index', { title: 'Express' });
});

/* GET users listing. */
router.get('/userlist', function(req, res) {
  var db = req.db;
  var users = db.get("users");
  users.find({},{},function(e,docs){
       res.render('userlist', {
            "userlist" : docs
       });
  });
});

router.get('/newuser', function(req, res){
     res.render('newuser', {title: 'Add New User' });
});

/* POST to Add User Service */
router.post('/adduser', function(req, res) {
    var db = req.db;
    // Get our form values. These rely on the "name" attributes
    var userName = req.body.userName;
    var userEmail = req.body.userEmail;
    // Set our collection
    var users = db.get('users');
    // Submit to the DB
    users.insert({
        "userName" : userName,
        "userEmail" : userEmail
    }, function (err, doc) {
        if (err) {
            res.send("There was a problem adding the information to the database.");
        }
        else {
            res.location("userlist");
            res.redirect("userlist");
        }
    });
});

router.get('/deluser/:id', function(req, res){
     debug("receive the id=" + req.params.id);

     var db = req.db;
     var id = req.params.id;
     var users = db.get('users');

     users.remove({_id: id}, function(err){
          if(err){
               res.send("Some Problem during deleting the user with id = " + id);
          }
          else {
               res.location("/userlist");
               res.redirect("/userlist");
          }
     })
});

module.exports = router;

And here is the jade part, I did not put much time on jade, actually my server side only provide REST API via JSON Format. 
I plan to not use jade to construct my HTML.

userlist.jade is as follow>
extends layout

block content
     h1.
          User List
     ul
          each user, i in userlist
               li
                    a(href="mailto:#{user.userEmail}")= user.userName
                    ||||
                    a(href="/deluser/#{user._id}") Delete

the newuser.jade is as follow>
extends layout

block content
     h1= title
     form#formAddUser(name="adduser",method="post",action="/adduser")
          input#inputUserName(type="text", placeholder="user name", name="userName")
          input#inputUserEmail(type="text", placeholder="user email", name="userEmail")
          button#btnSubmit(type="submit") submit

All the related codes and implementation are under easynodejs/userlist.

References:
http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/
http://cwbuecheler.com/web/tutorials/2014/restful-web-app-node-express-mongodb/
https://github.com/cwbuecheler/node-tutorial-2-restful-app
http://www.vincent-durmont.com/2013/11/29/first-rest-api-with-node-express-monk-and-mongodb.html

http://expressjs.com/
http://sillycat.iteye.com/blog/2010679

Monk document
https://github.com/LearnBoost/monk

Deployment
forever
http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever/
https://github.com/nodejitsu/forever
http://stackoverflow.com/questions/18008620/node-js-express-js-app-only-works-on-port-3000

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345221-1-1.html 上篇帖子: 学会提问---nodejs初体验 下篇帖子: 02-Nodejs与mongodb
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表