NodeJS+Express+Mongoose搭建网站系统
来源:互联网 发布:9月编程语言排行榜 编辑:程序博客网 时间:2024/05/17 07:27
简介
想开发一个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 http://127.0.0.1:8888/');
然而这样写代码就感觉代码屎烦屎烦的。
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 homepageapp.get('/', function(req, res) { res.send('hello world');});// POST method routeapp.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.js
var 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 setupapp.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 stacktraceif (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 userapp.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){})
最后
哈哈,写完了哈,大致的流程和操作就这么多,后续也尝试着把自己写的接口文档系统分享出来。。也算是对自己有一个交代。
先放上来洋盘一哈:
- NodeJS+Express+Mongoose搭建网站系统
- node+express+mongoose快速搭建电影网站
- nodejs/express+mongodb/mongoose
- nodejs+express+mongodb搭建网站
- nodejs+express+ejs+mongoose实例
- nodejs+express+ejs+mongoose实例
- nodejs+express+ejs+mongoose实例
- NodeJS实战:Express+Mongoose+ejs
- 基于Express+mongoose搭建的学生管理系统
- nodejs+express搭建简单的电影网站之 express安装
- NodeJS+Express+mongoose+Jade+bootstrap+jquery+inspector(调试工具)开发网站demo总结
- Nodejs+express+mongodb+mongoose实现个人博客
- nodejs-express环境搭建
- Nodejs,express博客搭建
- 基于nodejs+express+ejs的系统的开发环境搭建
- 详解nodejs中express搭建权限管理系统
- nodejs-express-ejs-mongodb-mongoose 错误锦集
- 搭建nodejs的express框架
- 为什么要在混合的时候,关闭ZWrite
- 异常处理(007)_常见的java异常有哪些(非运行时)
- 无限级联动递归查找上级节点
- nutch和solr做爬虫
- 三段状态机的思维陷阱
- NodeJS+Express+Mongoose搭建网站系统
- UITableview性能优化
- git删除远程分支后,本地同步问题
- javaweb程序员学习路线
- FreeMarker指南
- maven+spring+springmvc+mybatis
- 配置tomcat自动加载改变的class文件(无需重启tomcat)
- 基于qualcomm平台的kinect教程一之windows配置篇
- 欢迎使用CSDN-markdown编辑器