见识到原生nodeJs服务器的恶心后,我们来用下简单好用的框架吧~

服务器无非主要提供接口和静态文件读取,直接上代码:

const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
const fs = require('fs'); const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session'); const server = express();
server.listen(8088); //post(格式是x-www-form-urlencoded)回来的data要先用body-parser处理
server.use(bodyParser.urlencoded({}));
//post(格式是multipart/form-data)用multer处理,文件自动保存,文字留在req.body
let multerObj = multer({dest:'./upload/'});
server.use(multerObj.any()); //get接口 获取参数用req.query(express写好了)
server.get('/aaa',(req,res,next)=>{
console.log(req.query);
res.send('6666');
}) //post接口(两种格式都一样)获取参数用req.query和req.body,mutipart格式post的文件已经被储存
server.post('/getData',(req,res,next)=>{
console.log(req.query);
//body-parser会帮你把数据存放在req.body中
console.log(req.body);
res.send({code:0,msg:`接受到来自你的数据:${JSON.stringify(req.body)}`});
}) //有时候我们需要把文件带上我们的扩展名
server.post('/upload',(req,res,next)=>{
console.log(req.files);
let i = 0;
_next();
function _next(){
let file = req.files[i];
let newName = file.path+path.extname(file.originalname);
fs.rename(file.path,newName,err=>{
if(err){
res.status(500).send(`文件${file.originalname}上传失败~~`);
}else{
if(i<req.files.length-1){
i++;
_next();
}
}
})
}
res.send('ok');
}) //sendFile express内置的发送文件方法,status 相当于原生的writeHeader
server.get('/text',(req,res,next)=>{
if(req.query.pass == '123456'){
    res.sendFile(path.resolve('./static/1.txt'));
}else{
    res.status(403).send('密码错误喔~~');
}
}) //redirect express内置的重定向方法
server.get('/bilibili',(req,res,next)=>{
res.redirect('https://www.bilibili.com');
})
//express里可以用:跟参数
router.use('/bilibili/:a',(req,res,next)=>{
//通过params.a获取a,这种多用于重用该接口,就是例如'/bilibili/home'和'/bilibili/links'都是用当前的接口
 let a = req.params.a;
});
// express.static是express内置的读取静态文件的中间件 // express.static就是利用req.url的pathname在www下用fs读取文件流,然后rs.pipe(res) server.use(express.static('www'));


其实express的核心是中间件,所谓中间件就是带上req,res和next的函数。例如,我们自定义一个访问日志中间件:

const fs = require('fs');
const url = require('url'); module.exports = function(req,res,next){
let time = new Date().toGMTString();
let pathname = url.parse(req.url,true).pathname;
let method = req.method;
let data = `[${time}] ${pathname} ${method}\n`;
//fs.appendFile用来往文件里面添加文字
fs.appendFile('./log/log.txt',data,err=>{
if(err){
console.log('写入日志错误');
}
})
next();
}

之后可以直接当作中间件使用了:

const myLogger = require(./myLogger.js);

server.use(myLogger);

实际上,在实际做项目的时候,我们不都不使用路由, 不然所有的逻辑都写在server.js上实在太乱,而express原生的给我们提供了Route,写法很简单:

// server.js
const express = require('express'); const server = express();
server.listen(8088); //这里写了两个路由引入,说明'/user'归给User路由管,'/news'归给News路由管
server.use('/user',require('./Routes/User'));
server.use('/news',require('./Routes/News'));

下面是路由页的内容:

// Routes/User/index.js
const express = require('express');
const router = express.Router(); //写法很简单,把router看作server来写就好了
//只不过和server不同的是根目录变成'localhost:8088/user'罢了
router.get('/',(req,res,next)=>{
res.send('user的根目录');
}) router.get('/login',(req,res,next)=>{
res.send('user的登陆');
}) router.get('/reg',(req,res,next)=>{
res.send('user的注册');
}) //路由里面可以再有子路由,写法也是一样的
router.use('/vip',require('./Vip'));
module.exports = router;

//-----------------------------------

// Routes/User/Vip/index.js
const express = require('express');
const router = express.Router(); //router就可以看成这部分路由的server
router.get('/',(req,res,next)=>{
res.send('Vip_user的根目录');
}) router.get('/tequan',(req,res,next)=>{
res.send('user的特权页');
}) module.exports = router;

news的写法跟user的是一样的,总的来说,用法就是server.use('pathname',Router);

node框架express的更多相关文章

  1. node框架express里面静态文件中间件express.static,根据路径名查找文件

    - 是express框架下的一个方法,可以根据请求路径名查找某个文件下文件名字和路径名相同的文件 - 3.X里面有20多个中间件,但是在4.X里面 只保留了express.static - 语法 ex ...

  2. Node.js Express 框架学习

    转载:http://JavaScript.ruanyifeng.com/nodejs/express.html#toc0 感觉很牛的样子,不过觉得对初学者没太大用,里面很多例子用的api都没有详细的说 ...

  3. Node.js Express 框架

    Node.js Express 框架 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP ...

  4. Node.js Express框架

    Express 介绍 Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序. 它有助于基于Node Web应用程序的快速开发.下面是一 ...

  5. node.js框架express的安装

    node.js框架express的安装 首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录. $ mkdir myapp $ cd myapp 通 ...

  6. node.js Web应用框架Express入门指南

    node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...

  7. Node.js的框架-express

    Node.js的框架 express 是第三方的 express const express=require('express'); const app=express(); const PORT=3 ...

  8. 2.node。框架express

    node.js就是内置的谷歌V8引擎,封装了一些对文件操作,http请求处理的方法 使你能够用js来写后端代码 用node.js开发脱离浏览器的js程序,主要用于工具活着服务器,比如文件处理. 用最流 ...

  9. node.js express mvc轻量级框架实践

    本文记录的是笔者最近抽私下时间给朋友做的一个时时彩自动下注系统,比较简单,主要也是为了学习一下node.js. 其实逻辑没什么可以深谈的,主要是想说说这套代码结构.结构如下图: js的代码比较难以维护 ...

随机推荐

  1. 机器学习-kNN

    基于Peter Harrington所著<Machine Learning in Action> kNN,即k-NearestNeighbor算法,是一种最简单的分类算法,拿这个当机器学习 ...

  2. Redis之Hash

    一.Redis之Hash简介 1. Hash是一个string类型的field和value的映射表,适合用于存储对象. 2. 每个hash可以存储232-1个键值对(40多亿). 二.Redis之Ha ...

  3. 记录一次网站漏洞修复过程(三):第二轮处理(拦截SQL注入、跨站脚本攻击XSS)

    在程序编写的时候采用参数化的SQL语句可以有效的防止SQL注入,但是当程序一旦成型,再去修改大量的数据库执行语句并不是太现实,对网页表单上输入进行校验是易于实现的方法.在webForm 页面中开启校验 ...

  4. js备战春招の四の正则表达式详解

    正则表达式语法规则:/正则表达式主体/修饰符(可选)什么是正则表达式:正则表达式是用于匹配字符串中字符组合的模式.在 JavaScript中,正则表达式也是对象.这些模式被用于 RegExp 的 ex ...

  5. 方法的重写与重载的区别(Override与Overload)。重载的方法是否可以改变返回值的类型

    方法的重写(Override)与重载(Overload)的区别.重载的方法是否可以改变返回值的类型?[基础] 解释: 方法的重写overriding和重载Overloading是Java多态性的不同表 ...

  6. PHP之防御sql注入攻击的方式

    长期以来,web的安全性存在着巨大的争议与挑战.其中,sql注入就是一种常见的一种攻击方法,开发人员普遍的做法就是不停的过滤,转义参数,可是我们php大法天生弱类型的机制,总是让黑客有机可乘,绕过防御 ...

  7. AVL树(Java实现)

    AVL树基本介绍 AVL树是一种自平衡的二叉查找树,在AVL树中任何节点的两个子树的高度差不能超过1.就是相当于在二叉搜索树的基础上,在插入和删除时进行了平衡处理. 不平衡的四种情况 LL:结构介绍 ...

  8. DOM节点的创建

    1.createAttribute() 创建一个属性节点 => 接收参数为string类型的属性名称 var a=document.getElementsByClassName('name1') ...

  9. Spring Boot Junit单元测试

    http://blog.csdn.net/catoop/article/details/50752964

  10. python基础学习笔记二之列表

    1.列表 ①列表的创建: ②列表的查询(索引): ③列表的切片操作: 此处要注意到:返回索引0到3的元素,顾头不顾尾. ④列表的增加: s.append()  #直接在结尾追加 s.insert()  ...