2.请求和响应

2.1.请求相关

2.1.1.返回一个html页面

//  注意path模块需要先引入
app.get('/', function (req, res){
res.sendFile(path.resolve('./views/index.html'))
})

2.1.2.接收前台get方式发送过来的数据

// get方式发送过来的数据 使用req.query接收
app.get('/getuser', function (req, res) {
console.log(req.query.userid)
})
// 完整代码
// 引入express
var express = require('express')
var path = require('path')
var app = express()
var userArr = [
{"id": 1, "name": "xiaoqiang", "age": 18},
{"id": 2, "name": "xiaoli", "age": 19},
{"id": 3, "name": "xiaowang", "age": 20},
{"id": 4, "name": "xiaozhang", "age": 21}
]
app.get('/', function (req, res){
res.sendFile(path.resolve('./views/index.html'))
})
app.get('/user', function (req, res) {
res.sendFile(path.resolve('./views/login.html'))
}) app.get('/getuser', function (req, res) {
res.send(userArr.filter(function (item) {
console.log(item.id, req.query.userid)
return item.id == req.query.userid
}))
})
app.listen(8090, function (error) {
console.log('listening on 8090')
})

2.1.3.接收前台post方式发送过来的数据

接收post数据,我们可以使用一个叫做body-parser的模块来帮我们完成

1.第一步,先安装这个模块

// 先安装这个模块
npm install body-parser --save

2.第二步,引入这个模块,并且作为插件使用

var bodyParser = require('body-parser')

app.use(bodyParser.urlencoded({extended: false}))

3.第三步,获取数据

app.post('/login', function (req, res) {
res.send(req.body.user)
})

2.1.4.文件上传

文件上传需要用到multer插件,先安装multer

npm install multer --save

接下来需要引入multer

var multer = require('multer')

配置multer

// dest 表示 设置上传文件目录
var upload = multer({dest: './upload'})

单文件上传

// 处理文件上传请求
app.post('/upload', upload.single('fl'), function (req, res) {
res.send(req.file)
})

多文件上传

// 多文件上传
app.post('/upload', upload.array('fl', 3), function (req, res) {
res.send(req.files)
})

自定义文件路径和文件名

// 检查目录是否存在,不存在就创建
var createFolder = function(folder) {
try {
fs.accessSync(folder)
} catch (e) {
fs.mkdirSync(folder)
}
}
var uploadFolder = './upload'
// 先创建好上传目录
createFolder(uploadFolder)
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, uploadFolder)
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + new Date().getTime() + path.extname(file.originalname))
}
})
var upload = multer({storage: storage}) app.post('/upload', upload.array('fl', 3), function (req, res) {
res.send(req.file)
})

2.2.响应相关

2.2.1.send方法

send方法可以返回多种类型数据

// 返回一个对象
res.send({"name":"老张", age: 48})
// 返回数组
// res.send([1, 2, 3])
// 报错
// res.write({"name": "xiaoqiang"})
// res.end()

2.2.2.sendStatus

返回状态码

res.sendHeader(404)

如果没有这个方法,你会这样写:

res.writeHead(404, {'Content-Type': 'text/plain'})
res.write("not found!!!!")
res.end()

很明显第一种写法更简洁

#2.2.3.redirect
redirect用于重定向

app.get('/re', function (req, res) {

res.redirect('http://nodeing.com')

})

如果不使用redirect,而使用原生的语法,需要这样写:

res.setHeader('location', 'http://nodeing.com')

res.writeHead(301)

res.end()


螺钉课堂视频课程地址:http://edu.nodeing.com

express高效入门教程(2)的更多相关文章

  1. express高效入门教程(5)

    5.ejs模版 5.1.什么是模版引擎? 为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在后端开发中,处理数据的代码和展示 ...

  2. express高效入门教程(4)

    4.静态文件 4.1.普通处理静态文件的方法 在./views/index.html文件中去引入另一个css文件index.css,index.css文件放在public/css目录下,目录结构是这样 ...

  3. express高效入门教程(3)

    3.路由 路由到底是什么呢?不管官方定义到底是什么,咱通俗的说就是根据不同的url,执行不同的代码,类似于编程语言中的分支结构 3.1.express规划路由 稍微复杂点的应用,通常都是分模块进行的, ...

  4. express高效入门教程(1)

    1.hello world 1.1.安装express // 1.进入到自己的项目目录, 我这里是express-demo cd express-demo // 2.初始化项目,生成package.j ...

  5. 2.Tensor Shape《Pytorch神经网络高效入门教程》Deeplizard

            ,之后,我们张量和基础数据的形状酱油卷积运算来改变. 卷积改变了高度和宽度维度以及颜色通道的数量.

  6. 1.数据结构《Pytorch神经网络高效入门教程》Deeplizard

    当移动一个数组或向量时,我们需要一个索引:二维数组/矩阵需要两个索引, 比如说标量是零维张量,数组/向量/矢量是一维张量,矩阵是是二维张量,n维数组是n维张量. 如果我们被告知,  假设有一个张量t, ...

  7. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  8. React入门教程1---初见面

    React入门教程1---初见面:https://blog.csdn.net/solar_lan/article/details/82799248 React 教程 React 是一个用于构建用户界面 ...

  9. webpack入门教程之初识loader(二)

    上一节我们学习了webpack的安装和编译,这一节我们来一起学习webpack的加载器和配置文件. 要想让网页看起来绚丽多彩,那么css就是必不可少的一份子.如果想要在应用中增加一个css文件,那么w ...

随机推荐

  1. Jquery拓展方法

    拓展JQuery一般有两个方法: 1.全局拓展 比如 $.ajax()就是全局函数 拓展方法: Jquery.extend(); 比如: $.extend({ hello:function(mynam ...

  2. java实现扑克牌排列

    ** 扑克牌排列** 下面代码模拟了一套扑克牌(初始排序A~K,共13张)的操作过程. 操作过程是: 手里拿着这套扑克牌,从前面拿一张放在后面,再从前面拿一张放桌子上,再从前面拿一张放在后面,- 如此 ...

  3. 架构C02-商业模式与架构设计

    商业模式与架构设计:A段架构与B段架构 <思考软件创新设计:A段架构师思考技术> A段架构师必须具备鲜活的创新思维,睿智的策略思考,犀利的洞察力和灵活的战术才能把握稍纵即逝的商机     ...

  4. ubuntu qwt6.1.0安装

    1.ubuntu-12.04 qt-5.1.1 2.sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev 3.qmake 4.make 5.sud ...

  5. centos7上安装redis以及PHP安装redis扩展(一)

    1.关闭防火墙: systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewal ...

  6. Python第三方库 - 安装

    目录 1. 代码格式化 1.1. autopep8 1.2. YAPF 1.3. docformatter 2. 视觉相关 2.1. pyzbar, 条码(二维码)识别 2.2. tesserocr ...

  7. Clumsy Keke【模拟+三维数组】

    Clumsy Keke 题目链接(点击) Problem Description Keke is currently studying engineering drawing courses, and ...

  8. 面试官:线程池如何按照core、max、queue的执行循序去执行?(内附详细解析)

    前言 这是一个真实的面试题. 前几天一个朋友在群里分享了他刚刚面试候选者时问的问题:"线程池如何按照core.max.queue的执行循序去执行?". 我们都知道线程池中代码执行顺 ...

  9. spark源码解析大全

      第1章 Spark 整体概述 1.1 整体概念   Apache Spark 是一个开源的通用集群计算系统,它提供了 High-level 编程 API,支持 Scala.Java 和 Pytho ...

  10. cb24a_c++_STL算法简介

    算法概述 算法部分主要由头文件<algorithm>,<numeric>和<functional>组成.       <algorithm>是所有STL ...