【第22期】观点:IT 行业加班,到底有没有价值?

NodeJS+Express+Mongoose搭建网站系统

原创 2016年09月08日 14:30:13

简介

想开发一个API文档查看系统,主要就是为了比较方便的编写接口文档,正好最近也在研究NodeJS和前端的知识。后续会把接口文档查看系统的源代码,分享出来,写的不好之处,多多批评

Express简介

  1. Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。
  2. [路由]:Express对NodeJS的Http模块的封装,能很快速的创建API,
  3. 可使用 express.Router 类创建模块化、可挂载的路由句柄,降低代码耦合度。
  4. [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 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.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 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){
})

最后

哈哈,写完了哈,大致的流程和操作就这么多,后续也尝试着把自己写的接口文档系统分享出来。。也算是对自己有一个交代。

先放上来洋盘一哈:
这里写图片描述

版权声明:来啊,互相伤害,O(∩_∩)O 举报

相关文章推荐

Express + Mongoose 极简入门

今天尝试使用express + mongoose,构建了一个简单的Hello world,实现以下功能: 定义mongodb使用的Schema,一个User访问/输出Hello world访问/...

Node.js利用Express框架搭建小型网站(上)

一、Express环境搭建 Express是Node.js下的一个轻量级W

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

mongodb中的更新和插入操作

if control_info: coll.update( {'control': 'control'}, control_in...

node学习 express + mysql + ejs实现注册登录

之前写过一个node登录验证,现在回头看看真是丢脸,竟然把数据库的表读出来在内存中进行比对,真是误人子弟。 没写过后台接口真的是硬伤啊,所以还需要继续学习学习,大家一起努力吧!

nodejs 搭建一个私有的获取ip归属地的api

前言目前,免费的 ip 地址库不多,收费的感觉用起来不爽。淘宝有个 api 接口,但是有访问量限制。于是想到用 node 做一个自己的 api 接口。先从自己的数据库查,如果查不到的话,就到淘宝的接口...

body-parser Node.js(Express) HTTP请求体解析中间件

body-parser Node.js(Express) HTTP请求体解析中间件  2016年06月08日     781     声明 在HTTP请求中,POST、PUT和PA...

Node.js Express连接mysql完整的登陆注册系统(windows)

windows学习环境: node 版本: v0.10.35 express版本:4.10.0 mysql版本:5.6.21-log 第一部分:安装node 、Express(win8系统 需...

Nodejs进阶:Express常用中间件body-parser实现解析

原文链接 body-parser是非常常用的一个express中间件,作用是对post请求的请求体进行解析。使用非常简单,以下两行代码已经覆盖了大部分的使用场景。 app.use(body...

Node.js基于express搭建注册登录功能

学习新技术最快捷的方式就是做项目。这两天我写了个基于express和MongoDB的Web登录功能 先看看效果 技术选择 Node.jsMongoDBexpressmon...

用 nodejs express 搭建 restful api

本文参考了这篇文章, 英文好的同学,直接移步这里。最终代码地址简介搭建一个restful风格的api,数据库使用mongodb,使用 token 来认证客户端。基本流程 创建受保护和不受保护的路由。 ...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)