express高效入门教程(2)
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)的更多相关文章
- express高效入门教程(5)
5.ejs模版 5.1.什么是模版引擎? 为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在后端开发中,处理数据的代码和展示 ...
- express高效入门教程(4)
4.静态文件 4.1.普通处理静态文件的方法 在./views/index.html文件中去引入另一个css文件index.css,index.css文件放在public/css目录下,目录结构是这样 ...
- express高效入门教程(3)
3.路由 路由到底是什么呢?不管官方定义到底是什么,咱通俗的说就是根据不同的url,执行不同的代码,类似于编程语言中的分支结构 3.1.express规划路由 稍微复杂点的应用,通常都是分模块进行的, ...
- express高效入门教程(1)
1.hello world 1.1.安装express // 1.进入到自己的项目目录, 我这里是express-demo cd express-demo // 2.初始化项目,生成package.j ...
- 2.Tensor Shape《Pytorch神经网络高效入门教程》Deeplizard
,之后,我们张量和基础数据的形状酱油卷积运算来改变. 卷积改变了高度和宽度维度以及颜色通道的数量.
- 1.数据结构《Pytorch神经网络高效入门教程》Deeplizard
当移动一个数组或向量时,我们需要一个索引:二维数组/矩阵需要两个索引, 比如说标量是零维张量,数组/向量/矢量是一维张量,矩阵是是二维张量,n维数组是n维张量. 如果我们被告知, 假设有一个张量t, ...
- gulp详细入门教程
本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...
- React入门教程1---初见面
React入门教程1---初见面:https://blog.csdn.net/solar_lan/article/details/82799248 React 教程 React 是一个用于构建用户界面 ...
- webpack入门教程之初识loader(二)
上一节我们学习了webpack的安装和编译,这一节我们来一起学习webpack的加载器和配置文件. 要想让网页看起来绚丽多彩,那么css就是必不可少的一份子.如果想要在应用中增加一个css文件,那么w ...
随机推荐
- 【Hadoop】hdfs的秘密,namenode,datanode,yarn,安全模式,fsimage,edits...
1.bin/hdfs namenode -format ** 注意事项 1.在配置好了配置文件之后,首次启动之前,做初始化操作 2.在后续启动的时候,不需要再初始化 3.初始化的一些影响 一.初始化操 ...
- Java实现 蓝桥杯算法提高金明的预算方案
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元 ...
- 游戏开发之UI管理器(跨引擎)
使用UI管理器的目的 使用单场景与zindex结合的方式管理UI. 能够隐藏底层UI达到优化效果. 很好的组织和管理UI. 跨引擎使用. 管理器分类 根据以往经验我开发了三种类型的管理器,队列管理器, ...
- Elasticsearch 别管原理,先run起来
少点代码,多点头发 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 看文章有两点需要注意: 本公 ...
- 使用PyQtGraph绘制数据滚动图形(4)
app = pg.QtGui.QApplication([]) win = pg.GraphicsWindow(title="数据滚动") win.resize(600,300) ...
- Unable to open debugger port (127.0.0.1:55119): java.net.SocketException "Socket closed"
1.端口问题 排查端口,lsof -i:8080 修改端口等 2.权限问题 端口排查无解的话,查看idea Event Log(View->Tool Window->Event Log) ...
- php使用json_encode中遇见问题?
注:php版本5.4下,不支持json_encode对中文的处理,要么升级php版本. json_encode($value,$options) 其中有2个比较常用到的参数: 1.JSON_UNESC ...
- python 直方图
import matplotlib.pyplot as plt import numpy as np pop = np.random.randint(0,100,100) pop n,bins,pat ...
- blob斑点检测
目录 1. 可选算法 1.1. Laplacian of Gaussian (LoG) 1.2. Difference of Gaussian (DoG) 1.3. Determinant of He ...
- @loj - 2977@ 「THUSCH 2017」巧克力
目录 @description@ @solution@ @accepted code@ @details@ @description@ 「人生就像一盒巧克力,你永远不知道吃到的下一块是什么味道.」 明 ...