见识到原生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. 八年架构师大咖首次揭秘,年薪50W秘籍!

    序言 我是土生土长的老北京人,你们肯定觉得我很有钱,为啥呢? 因为觉得我是北京户口,其实你们错了,我的房子是靠我自己买的,父母基本上没帮到我什么,当然,我也不需要吧! 我只想说,作为一名程序员,我很自 ...

  2. fitnesse - 安装部署

    fitnesse - 安装部署 2017-09-29 1 先决条件Java环境 确保机器上装了java, java -version 2 安装fitnesse http://fitnesse.org/ ...

  3. python已安装了DNS处理模块,执行时却报错ImportError

    一.代码: #!/usr/bin/python import dns.resolver ............此处省略 二.故障报错 ubuntu:~/automation/001_base$ py ...

  4. NOIP2017 总结

    联赛结束,但是我并没有得到预期的结果,特写此文分析原因,希望我不会就此退役. 回顾一年,我做了什么? 2016年联赛,我水了两天,抱着挂掉的心态拿到了1=. 2016-2017寒假,参加集训,三天考试 ...

  5. Xamarin Forms中WebView的自适应高度

    在Xamarin.Forms中,WebView如果嵌套在StackLayout和RelativeLayout中必须要设置HeightRequest和WidthRequest属性才会进行渲染.可是在实际 ...

  6. Intellij +Maven 报错: Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

    在intellij使用 Maven Project 测试时,运行test时看到log里的报错信息: -Dmaven.multiModuleProjectDirectory system propert ...

  7. jQuery学习笔记之extend方法小结

    在学习jQuery的时候,学习到了$.extend的主要用法,在此做一个简单的总结. (1)当只写一个对象自变量时,拓展的是jQuery的工具方法,如: $.extend({ aaa:function ...

  8. IPFS:世界正在悄然发生变化

    世界正在悄然发生变化(IPFS) 2015-05-05 Juan Benet 在自己的终端里面敲入了下面的文字: > echo "hello worlds" | ipfs a ...

  9. 【js Date】时间字符串、时间戳转换成今天,明天,本月等文字日期

    作为前端开发攻城师,难免对时间进行各种计算和格式转换,一个js的Date对象统统可以搞定.下例是将一个具体的时间转换成今天.明天.几天之内.本月等文字描述的日期的工具函数,也可以基于它扩展,多应用于网 ...

  10. java各种概念 Core Java总结

    Base: OOA是什么?OOD是什么?OOP是什么?{ oo(object-oriented):基于对象概念,以对象为中心,以类和继承为构造机制,来认识,理解,刻画客观世界和设计,构建相应的软件系统 ...