第一次开发node接口-干货总结
技术栈:node
+ express
+ mongoose
git地址,可直接使用。
nodemon 热更新
使用nodemon
启动项目,可以在修改代码时不用重新启动。
1 | // 安装 |
安装之后,修改启动命令,
1 | // package.json |
中间件
body-parser
body-parser
解析请求参数,使我们可以通过req.body.xx
访问参数。
1 | // index.js |
cookie-parser
cookie-parser
解析请求携带的cookie
,使我们可以通过req.cookies
访问cookie
。
1 | const email = JSON.parse(req.cookies[config.cookieName]).email; |
1 | // index.js |
路由中间件
借助路由中间件,我们可以格式化接口返回值。
1 | // routers/index.js |
mongoose指令
查
find
查找所有符合条件的数据;findOne
查找第一个符合条件的数据;findById
查找符合条件的数据,查询条件为id
;
Model.find(conditions, [projection], [options], [callback])
1 | model.find( |
$gte
是操作符,类似的操作符还有不少:
$eq
相等$ne
不相等$gt
大于$gte
大于等于$lt
小于$lte
小于等于$in
与数组中任意一个匹配$nin
与数组中每一个都不匹配$and
满足数组中所有条件$nor
所有条件都不满足$or
满足数组的其中一个条件$not
不满足条件$exists
存在指定字段$type
属于指定类型$all
匹配包含查询数组所有条件的数组字段$elemMatch
匹配数组字段中的某个值满足指定的所有条件$size
匹配数组字段的length
与查询条件相同 Same as querySame as query conditions
projection
指定查询结果包含或不包含哪些字段,也可以写成字符串:"-_id -__v"
,不能包含不包含同时使用。findOne
和findById
的区别在于id
为undefined
的情况,findOne({ _id: undefined })
返回任意一条数据,findById(undefined)
返回null
。
增
save([options], [options.safe], [options.validateBeforeSave], [fn])
增加一条,需要写实例化;Model.create(doc(s), [callback])
增加一条或多条;Model.insertMany(doc(s), [options], [callback])
增加多条;
save()
的示例如下:
1 | // models/user.js |
1 | // routers/user.js |
删
findOneAndDelete
找到第一个符合条件的并删除;findByIdAndDelete
查询条件为id
;deleteMany
删除所有符合条件的;
Model.findOneAndDelete(filter, options, callback)
改
findOneAndUpdate
和findByIdAndUpdate
都是先查找然后再修改;updateOne
也是查找符合条件的第一条数据并修改;updateMany
是批量修改数据;
Model.findOneAndUpdate(filter, update, [options], [callback])
举个例子:
1 | const info = await User.findByIdAndUpdate( |
解析excel文件
使用multer
解析form-data数据,npm地址。
使用node-xlsx
解析excel,npm地址。
1 | const multer = require('multer'); |
使用req.file.mimetype
可以获取文件的MIME type
,可以以此来判断文件类型,excel
文件的MIME type
是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
或application/vnd.ms-excel
。
下载文件接口
使用sendFile
可以直接返回文件类型数据。
1 | router.get('/download', async function (req, res) { |
1 | const handleDownload = async () => { |
docker部署配置
1 | # Dockefile文件 |