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. Java实现 LeetCode 532 数组中的K-diff数对(双指针,滑动窗口)

    532. 数组中的K-diff数对 给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对.这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数 ...

  2. Java实现 蓝桥杯 算法训练 二进制数数

    试题 算法训练 二进制数数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定L,R.统计[L,R]区间内的所有数在二进制下包含的"1"的个数之和. 如5的二进 ...

  3. Markdown编辑器说明

    标题: Markdown编辑器说明 作者: 梦幻之心星 347369787@QQ.com 标签: [Markdown, 编辑器] 目录: [软件] 日期: 2020-6-4 前提说明 在使用Markd ...

  4. Scrapy 小技巧(一):使用 scrapy 自带的函数(follow & follow_all)优雅的生成下一个请求

    前言 如何优雅的获取同一个网站上下一次爬取的链接并放到生成一个 Scrapy Response 呢? 样例 from urllib import parse import scrapy class S ...

  5. 括号匹配-算法详细题解LeetCode

    题目:有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. ...

  6. git clone 时注意点

    环境: 在公司访问外网需要设置代理,另外,在公司局域网内架设了一台 GIT 服务器. 在使用 git clone 时,不能设置成 git 使用代理: git config --global http. ...

  7. [NOI Online #3]魔法值

    题目   点这里看题目. 分析   我们不难想到,对于系数进行一下的拆分: \[\begin{aligned} f(u,j)&=\bigoplus_{(u,v)\in E} f(v,j-1)\ ...

  8. (一)JDK安装和使用eclipse输出hello world

    目录 一.jdk安装(推荐使用压缩包安装) 二.使用eclipse输出hello world 一.jdk安装(推荐使用压缩包安装) 1.压缩包安装的优点:若可能同时使用多个jdk版本,切换jdk时只需 ...

  9. PyQt5常用控件及方法(代码段)

    文章目录PyQt5程序基本格式QMainWindow主窗口QLabel标签QTextBrowser文本浏览器QTextEdit文本编辑器QPushButton按键QCheckBox复选框QRadioB ...

  10. Razor 视图

    Razor 视图 关于视图引擎 视图引擎简单理解就是能够支持对视图的解析,在 ASP.NET MVC 中,视图引擎的作用就是把视图处理成浏览器能够执行的 HTML 代码,不同的视图引擎,语法规则不一样 ...