NodeJS+Express+Mongoose搭建网站系统
2016-09-08 14:30
731 查看
简介
想开发一个API文档查看系统,主要就是为了比较方便的编写接口文档,正好最近也在研究NodeJS和前端的知识。后续会把接口文档查看系统的源代码,分享出来,写的不好之处,多多批评Express简介
Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。[路由]:Express对NodeJS的Http模块的封装,能很快速的创建API,
可使用 express.Router 类创建模块化、可挂载的路由句柄,降低代码耦合度。
[DEBUG]:Express自身提供了DEBUG模式,对开发来说是一件好事。
Express路由分析
路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组成。假如不用Express,提供路由
那么就要使用Nodejs创建服务端,当客户端向服务端发送请求,那么也就只能用callback的request中的信息来获取客户端需要请求的URL,Method(get or post?),Http请求出错怎么办,404? 500?怎么办var http = require('http'); http.createServer(function (request, response) { console.log(request.url); console.log(request.method); if (request.url=='/') { if (request.method=='GET') { // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); //处理其他业务 console.log("处理其他业务中..."); // 发送响应数据 "Hello Users" response.end('Hello World Node base\n'); } } if (request.url=='/user') { if (request.method=='GET') { // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 发送响应数据 "Hello World" //处理其他业务 console.log("处理其他业务中..."); response.end('Hello Users\n'); } }; }).listen(8888); // 终端打印如下信息 console.log('Server running at ' target='_blank'>http://127.0.0.1:8888/');[/code]
然而这样写代码就感觉代码屎烦屎烦的。Express提供路由
Express框架就帮我们封装了http(ex:request_Url,request_Method,request_Err)处理var express = require('express'); var app = express(); // respond with "hello world" when a GET request is made to the homepage app.get('/', function(req, res) { res.send('hello world'); }); // POST method route app.post('/', function (req, res) { res.send('POST request to the homepage'); });
这样看起就清爽一些了 哈哈 一切为了向我这种懒人的人性化设计 哈哈哈哈 先让我笑会儿….
咳咳..吐了一口老血!NodeJS项目骨架:
//这样就会形成一个以Express为框架的项目骨架,默认是jade模版引擎 express projectName //生成ejs模版引擎 express -e projectName
想了解更多信息请点击→_→ Express官网骨架目录分析
框架:使用express框架.
服务端环境:Nodejs ,利用NodeJS中强大的V8和libuv
数据库:mongodb
数据层:models
数据访问层:mongoose
控制层(路由控制层):routes 使用express支持的中间件
视图层:Views,jade模版引擎
测试:test
数据库配置与连接:db.js
程序入口:app.js
www: Express的Debug功能
package.json
这样也就搭建了一个比较简易的开发骨架,接下来来分析一下app.jsvar express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); //获取路由 var routes = require('./routes/index'); var users = require('./routes/users'); var adminIndex=require('./routes/admin/adminIndex'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views'));//设置模版路径位置 app.set('view engine', 'ejs');//设置模版引擎 // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); //使用各种中间件 app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public')));//设置静态文件存放位置,比如js,css //设置路由 app.use('/', routes); app.use('/users', users); app.use('/admin',adminIndex); // catch 404 and forward to error handler //如果在前面找不到路由,执行这一步 app.use(function(req, res, next) { var err = new Error('Not Found '); err.status = 404; next(err); //如果为next(),方法 就会执行下面代码中的express.use(function(req,res.next)),回调函数为function(req,res,next)的方法 }); /* app.use(function(err,req,res,next){//express会执行use(function(err,req,res,next)),回调函数为function(err,req,res,next)的方法 express.use() res.send("报错了哈"); }); */ // error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') {//如果为开发环境 app.use(function(err, req, res, next) { res.status(err.status || 500); console.log(res.statusCode); res.render('error', { message: err.message, error: err }); //res.send("报错了,兄弟"); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); //res.send('aaaaa'); }); var server=app.listen(2333,function(){ var host = server.address().address; var port = server.address().port; console.log('sky app listening at http://%s:%s', host, port); }) module.exports = app;需要注意的几方面
设置模版引擎:app.set('views', path.join(__dirname, 'views'));//设置模版路径位置 app.set('view engine', 'ejs');//设置模版引擎
设置静态文件存放位置:app.use(express.static(path.join(__dirname, 'public')));//设置静态文件存放位置,比如js,css
获取路由://设置路由 var routes = require('./routes/index'); var users = require('./routes/users'); var adminIndex=require('./routes/admin/adminIndex');
设置路由:app.use('/', routes); app.use('/users', users); app.use('/admin',adminIndex);
express中的next(),next(err):
next()://如果为next()方法 就会执行下面代码中的express.use(function(req,res.next)),回调函数为function(req,res,next)的方法 ex: app.use(function(req,res,next){ next(); }) //就会执行这个方法 app.use(function(req,res,next){ })
next(err)://如果为next(err),express会执行use(function(err,req,res,next)),回调函数为function(err,req,res,next)的方法 app.use(function(req,res,next){ next(err); }) app.use(function(err,req,res,next){ })最后
哈哈,写完了哈,大致的流程和操作就这么多,后续也尝试着把自己写的接口文档系统分享出来。。也算是对自己有一个交代。
先放上来洋盘一哈:
相关文章推荐
- node.js express安装及示例网站搭建
- nodejs+express搭建电影网站之二 -----具体项目结构 开发环境的建立 测试页面流程跑通
- nodejs express搭建一个网站整理
- Node.js利用Express框架搭建小型网站(下)
- node.js express安装及示例网站搭建方法(分享)
- Node.js + Express + Mongodb 开发搭建个人网站(一)
- 从无到有,用Nodejs+express+mongodb搭建简易登陆系统
- node+express+mongoose快速搭建电影网站
- node.js&mongodb&express 搭建个人博客系统
- Node.js搭建博客步骤(express+swig+mongoose+body-parser)
- nodejs+express搭建简单的电影网站之 express安装
- Node.js利用Express框架搭建小型网站
- 简单得不得了的教程-一步一步用 NODE.JS, EXPRESS, JADE, MONGODB 搭建一个网站
- NodeJS+Express+mongoose+Jade+bootstrap+jquery+inspector(调试工具)开发网站demo总结
- 基于nodejs+express+ejs的系统的开发环境搭建
- Node.js + Express + Mongodb 开发搭建个人网站(三)
- Node.js利用Express框架搭建小型网站(上)
- Node.js + Express + Mongodb 开发搭建个人网站(二)
- nodejs+express+mongodb搭建网站
- 完全傻瓜式搭建基于nodejs+express+vCloudFoundry的网站