设为首页 收藏本站
查看: 632|回复: 0

[经验分享] NODEJS(6)Expressjs and REST

[复制链接]

尚未签到

发表于 2017-2-21 11:15:14 | 显示全部楼层 |阅读模式
  NODEJS(6)Expressjs and REST

1. Prepare the dependency
Check the Latest Version
>npm info monk version
npm http GET https://registry.npmjs.org/monk
  npm http 304 https://registry.npmjs.org/monk 0.9.0

>pm info express version
4.2.0

I know I will use express as my web frame working to handle the request and dispatcher. Monk to handle the mongodb connection.
So package.json will be as follow>
{
     "name": "buglist",
     "version": "0.0.1",
     "private": true,
     "dependencies": {
          "express": "4.2.0",
          "monk": "0.9.0",
          "body-parser": "1.2.0"
     }
}

2. How they work together
app.js will use express to listen to a port and serve as http server.
var express = require('express');
var bodyParser = require('body-parser'); 

var app = express();
app.use(bodyParser());
app.use(bodyParser.json({ type: 'application/vnd.api+json' }))

var bug_module = require('./bug/route');

app.use('/bugs', bug_module);
 
app.set('port', process.env.PORT || 3001);
app.listen(app.get('port'));
console.log('Running nodeJS on port ' + app.get('port') + ' !');

Router will be handle by express.Router() in route.js in every module
var express = require('express');
var router = express.Router();

var action = require('./action');

/* GET users listing. */
router.get('/', action.getAll);
router.post('/', action.create);
router.get('/:id', action.get);
router.put('/:id', action.update);
router.delete('/:id', action.del);

module.exports = router;

action.js and config.json will handle the connection between request and mongodb, and the limit business logic will be in here.
{
     "host": "localhost",
     "port": 27010,
     "dbname": "buglist"
}

var config = require('../config.json');
var monk = require('monk');
var db = monk(config.host+":"+config.port+'/'+config.dbname);
var collection = db.get('bugs');

// Returns all the bugs
exports.getAll = function(req, res) {
     collection.find({}, function(err, bugs){
          if (err) res.json(500, err);
          else res.json(bugs);
     });
};

// Creates a bug
exports.create = function(req, res) {
     var body = req.body;
     console.log("post body  = " + body);
     console.log("create title = " + body.title);
     console.log("create creation = " + body.creation);
     console.log("create status = " + body.status);
     console.log("create assignee = " + body.assignee);
     collection.insert(body, function(err, bug){
          if (err) res.json(500, err);
          else res.json(201, bug);
     });
};

// Get a bug
exports.get = function(req, res) {
     var id = req.params.id;
     collection.findById(id, function(err, bug){
          if (err) res.json(500, err);
          else if (bug) res.json(bug);
          else res.send(404);
     });
};

// Updates a bug
exports.update = function(req, res) {
     var id = req.params.id;
     var body = req.body;
     delete body._id;
     collection.findAndModify({_id: id}, {$set: body}, {multi:false, new:true}, function(err, bug){
          if (err) res.json(500, err);
          else if (bug) res.json(bug);
          else res.send(404);
     });
};

// Deletes a bug
exports.del = function(req, res) {
     var id = req.params.id;
     collection.remove({_id: id}, function(err){
          if (err) res.json(500, err);
          else res.send(204);
     });
};


3. How to Deploy 
Command to Start the Server
>DEBUG=express:* node app.js

Show the Debug Message for express and monk
>DEBUG="express:* monk:*" node app.js

Put a port Number in the Command Line
>PORT=3002 DEBUG="express:* monk:*" node app.js

In the app.js, add these things to support that>
app.set('port', process.env.PORT || 3001);
app.listen(app.get('port'));
console.log('Running nodeJS on port ' + app.get('port') + ' !');

Tips:
1. Body Parser Problem.
Error Message>
Most middleware (like bodyParser) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.

Error: Cannot find module 'body-parser'

Solution>
>npm info body-parser version
npm http GET https://registry.npmjs.org/body-parsernpm http 200 https://registry.npmjs.org/body-parser1.2.0


References:
http://sillycat.iteye.com/admin/blogs/2067546
https://github.com/vdurmont/express-monk-mongodb-example
http://www.vincent-durmont.com/2013/11/29/first-rest-api-with-node-express-monk-and-mongodb.html
body parser document
https://github.com/expressjs/body-parser
monk document
https://github.com/LearnBoost/monk
port number discuss
http://stackoverflow.com/questions/18008620/node-js-express-js-app-only-works-on-port-3000

Make the nodejs app live for ever
https://github.com/nodejitsu/forever
https://github.com/Unitech/pm2

运维网声明 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-345197-1-1.html 上篇帖子: NodeJs OOP的实现 下篇帖子: nodejs入门小实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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