见识到原生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. linux优化项

    Linux优化: 1.建立普通账号,使用普通用户登陆. 2.处理SELINUX. 3.处理防火墙. 4.精简开机自启动服务.保留sshd,network,crond,rsyslog,sysstat. ...

  2. Global.asax 中校验Session

    Application 相关的 Application_Init:在每一个HttpApplication实例初始化的时候执行. Application_Disposed:在每一个HttpApplica ...

  3. Java并发编程实战(chapter_1)(原子性、可见性)

    混混噩噩看了很多多线程的书籍,一直认为自己还不够资格去阅读这本书.有种要高登大堂的感觉,被各种网络上.朋友.同事一顿外加一顿的宣传与传颂,多多少少再自我内心中产生了一种敬畏感.2月28好开始看了之后, ...

  4. 属性动画 ValueAnimator 运行原理全解析

    最近下班时间都用来健身还有看书了,博客被晾了一段时间了,原谅我~~~~ 提问环节 好,废话不多说,之前我们已经分析过 View 动画 Animation 运行原理解析,那么这次就来学习下属性动画的运行 ...

  5. phpstorm激活码生成器地址

    http://idea.qinxi1992.cn/ 写在windows/system32/drivers/etc/hosts里 0.0.0.0 account.jetbrains.com 激活码位置: ...

  6. Ubuntu Mininet环境搭建

    我们通过源码方式搭建mininet仿真平台,使用git下载mininet源码 git clone git://github.com/mininet/mininet 下载完成之后,使用下面命令选择安装版 ...

  7. angular的$scope的使用

    1. 可以在scope中直接使用 // 监听日期变化 $scope.$watch('vaFilter.startEffectiveDate', function(newDate, oldDate, s ...

  8. 设计模式 --> (16)观察者模式

    观察者模式 定义对象间的 一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.它还有两个别名,依赖(Dependents),发布- 订阅(Publish-Sub ...

  9. java 二叉树排序

    1 class BinaryTree{ 2 class Node{ 3 private Comparable data; 4 private Node left; 5 private Node rig ...

  10. java 定义泛型方法

    1 class Demo{ 2 public <T> T fun(T t){ 3 return t; 4 } 5 } 6 public class GenericsDemo { 7 pub ...