见识到原生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. 弹框modal, 获取id与绑定id

    var span2 = '<span class="replaceBlue cursor" data-target="#myModalMember" da ...

  2. TP90 95 99指标

    备忘下: 保证90%请求都能被响应的最小耗时 The tp90 is a minimum time under which 90% of requests have been served. tp90 ...

  3. GeoJSON C#判断某一点是否在某一区域范围之内

    GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法的地理空间信息数据交换格式.GeoJSON对象可以表示几何.特征或者特征集合.GeoJSON支持下面几何类型:点 ...

  4. C语言与C++语言之间关系

    很多时候我们对于C和C++的区别不是很清楚,以至于弄混的情况并不少见.那C语言和C++语言到底是怎么回事呢? 首先,我们来看下百度百科对语言和C++语言描述,相对而说也还算是比较权威的. C语言 C语 ...

  5. SignalR Self Host+MVC等多端消息推送服务(2)

    一.概述 上次的文章中我们简单的实现了SignalR自托管的服务端,今天我们来实现控制台程序调用SignalR服务端来实现推送信息,由于之前我们是打算做审批消息推送,所以我们的demo方向是做指定人发 ...

  6. workflow--相关笔记

    转自http://blog.csdn.net/u014682573/article/details/29922093 1. 工作流技术 工作流(Workflow) 定义:工作流就是将一组任务组织起来, ...

  7. 笔记:Maven 配置文件模板

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  8. 笔记:Hibernate SQL 查询

    Hibernate 支持使用原生的SQL查询,使用原生SQL查询可以利用某些数据库特性,原生SQL查询也支持将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程. ...

  9. python处理点云数据并生成三维点云模型

    1.python代码: 1 import numpy as np 2 import matplotlib.pyplot as plt 3 from mpl_toolkits.mplot3d impor ...

  10. Find The Multiply

    Find The Multiply poj-1426 题目大意:给你一个正整数n,求任意一个正整数m,使得n|m且m在十进制下的每一位都是0或1. 注释:n<=200. 想法:看网上的题解全是b ...