node框架express
见识到原生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的更多相关文章
- node框架express里面静态文件中间件express.static,根据路径名查找文件
- 是express框架下的一个方法,可以根据请求路径名查找某个文件下文件名字和路径名相同的文件 - 3.X里面有20多个中间件,但是在4.X里面 只保留了express.static - 语法 ex ...
- Node.js Express 框架学习
转载:http://JavaScript.ruanyifeng.com/nodejs/express.html#toc0 感觉很牛的样子,不过觉得对初学者没太大用,里面很多例子用的api都没有详细的说 ...
- Node.js Express 框架
Node.js Express 框架 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP ...
- Node.js Express框架
Express 介绍 Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序. 它有助于基于Node Web应用程序的快速开发.下面是一 ...
- node.js框架express的安装
node.js框架express的安装 首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录. $ mkdir myapp $ cd myapp 通 ...
- node.js Web应用框架Express入门指南
node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...
- Node.js的框架-express
Node.js的框架 express 是第三方的 express const express=require('express'); const app=express(); const PORT=3 ...
- 2.node。框架express
node.js就是内置的谷歌V8引擎,封装了一些对文件操作,http请求处理的方法 使你能够用js来写后端代码 用node.js开发脱离浏览器的js程序,主要用于工具活着服务器,比如文件处理. 用最流 ...
- node.js express mvc轻量级框架实践
本文记录的是笔者最近抽私下时间给朋友做的一个时时彩自动下注系统,比较简单,主要也是为了学习一下node.js. 其实逻辑没什么可以深谈的,主要是想说说这套代码结构.结构如下图: js的代码比较难以维护 ...
随机推荐
- 【BZOJ3529】【SDOI2014】数表
Time Limit: 1000 ms Memory Limit: 512 MB Description 有一张n×m的数表,其第i行第j列 (1≤i≤n,1≤j≤m)的数值为能同时整除i和j的所有自 ...
- 利用EF Core的Join进行多表查询
背景 话说有这么一家子,老公养了一条狗,老婆养了一只猫. 数据库的设计 人表 宠物表 通过表可以知道,宠物通过Owner指向主人的Id. 问题来了,我要和故事开头一样,老公-狗,老婆-猫,对应起来,怎 ...
- 负载均衡,会话保持,session同步(转)
转自:http://bbs.linuxtone.org/thread-18212-1-1.html 一,什么负载均衡一个新网站是不要做负载均衡的,因为访问量不大,流量也不大,所以没有必要搞这些东西.但 ...
- 【Unity3D与23种设计模式】中介者模式(Mediator)
GoF中定义: 定义一个接口来封装一群对象的互动行为 中介者通过移除对象之间的引用 以减少他们之间的耦合度 并且能改变它们之间的互动独立性 游戏做的越大,系统划分的也就越多 如事件系统,关卡系统,信息 ...
- elfinder中通过DirectoryStream.Filter实现筛选隐藏目录(二)
今天还是没事看了看elfinder源码,发现之前说的两个版本实现都是基于不同的jdkelfinder源码浏览-Volume文件系统操作类(1), 带前端页面的是基于1.6中File实现,另一个是基于1 ...
- jar包和war包的介绍与区别
在学习maven的过程中接触到了jar包和war包.之前在写小项目的时候真的遇到过war包,当时为了找到jar包,把war包 的后缀名改成了.rar的压缩文件,在里面提取出来jar包来用.其实jar包 ...
- 走近webpack(0)--正文之前的故事
在前端工作的过程中,只要你接触过vue,angular,react,gulp就一定知道webpack或者听说过或者使用过webpack,但是或许你对webpack的使用方法并不是十分了解,只是会用写好 ...
- 【Flask】 利用uWSGI和Nginx发布Flask应用
因为Flask比较容易上手,之前也拿flask写过几个小项目,不过当时天真地以为只要在服务器上nohup跑一个python脚本就算是成功发布了这个flask项目.实际上这还面临很多问题,比如并发性不好 ...
- 【Linux】 字符串和文本处理工具 grep & sed & awk
Linux字符串&文本处理工具 因为用linux的时候主要用到的还是字符交互界面,所以对字符串的处理变得十分重要.这篇介绍三个常用的字符串处理工具,包括grep,sed和awk ■ grep ...
- 关于JSP页面Property [ssid] not found on type [java.lang.String]错误的注意事项
转发于:http://blog.csdn.net/w86440044/article/details/28277177