第一次开发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文件 |







.png)