newteo / team-blog-repo

42 stars 3 forks source link

第2个API #40

Open Cbinbin opened 7 years ago

Cbinbin commented 7 years ago

偿视API主要为上传文件,对数据的查找筛选,JWT.  

在此之前写过一个很简单的API,用了post和get各一次就完了.通过看别人写的代码里用multer来对文件进行上传,我就从multer开始了我的第二个API;
知道如何上传文件后,写请求方式,里面再加上对mongodb数据的查改删存来实现一些小功能,这时才想到文件只能上传添加,不知该如何删掉,紧接着找了个fs删了文件;
最后在一些请求中加token生成和验证,这样偿视API差不多完成了.不过还差测试和完善. 

上传

上传部分用到了两个中间件:multer 和 fs ,因为不清楚multer怎么对文件进行删除操作,所以用fs代替.

上传和删除从官网看到,需要用到的代码有下面这些:

multer

//diskStorage为multer的磁盘存储引擎
var storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'path/to')
  },    //文件存储的路径
  filename: (req, file, cb) => {
    cb(null, file.originalname )
  }    //文件存储的文件名
})
var upload = multer({ storage: storage }).single('A key')

//当用到 post 时执行 upload    
router.post('/router', (req, res) => {
  upload(req, res, (err) => {
    if(err) {
      //发送错误信息
      return
    }
    //上传文件后其他操作
  })
})

fs

//fs文件操作系统
fs.unlink(path,[callback])
//删除路径中的文件

筛选

 由于数据库为mongodb,所以对数据库操作的语句还是和mongodb用到的语句是差不多的.如

mongodb中: > db.collection.find()

XX.js中: 'model'.find()

操作语句经常用到的有以下这些:

.find()    //符合条件的所有文档(document)
.findOne()    //符合条件的单个文档(如有多个,默认首个)
.findById()    //符合ID的单个文档
.save()    //保存文档(单个),如果不是单个会报错'xxx not a function'
.remove()    //删除文档(可多个)

接着拿 .findOne() 作较为详细的说明:

下面第一个{}内是筛选条件,最多一域一值,也可空着;

第二个{}如果没用到是可以去掉的,这儿的{}对选出文档的域显示,0表示不显示,1表示显示;可多个域;

最后function做判断.

'model'.findOne({ 域: 值 }, { 域: 0(or 1), 域: 1(or 0)}, (err, ooo) => {
  if(err) return //报错
  if(!ooo) return //not found ,其实这儿也可包含err
  console.log(ooo)
})

JWT

jsonwebtoken

以下是本人看官方文档和结合自己的想法,如有不对,还望指出.

JWT签名

jwt.sign(payload, secretOrPrivateKey, options, [callback])

payload:

可放你自己想用的属性,
比如你做注册登录API的admin和password(可包含生成的id),方便你后面验证时用到.
eg: {admin:oooo, password:xxxx}

secretOrPrivateKey:

字符串给密钥命名,自定义

options:

这里可选或多选的,包含多个固定的属性,有
algorithm (加密的算法),
expiresIn (token有效期),
notBefore (有效期延后生效),
audience (用户[自定义]),
issuer (发行者[自定义]),
jwtid (token标识[自定义]),
subject (主题[自定义]),
noTimestamp (如为true,解密后将不显示签发时间(iat)),
header (JWT头部,一般为 {"typ": "JWT", "alg": "HS256"} )

callback:

函数调用

JWT验证

jwt.verify(token, secretOrPrivateKey, options, [callback])

heroku

heroku  node.js安装

安装heroku之前需已经安装了node  npm  git

选择 Download the Heroku CLI Debian/Ubuntu

如果用的是其他语言或其他系统,点这个heroku了解.

open your terminal

$ wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh

$ heroku login

$ git clone https://github.com/你的github名/项目名.git

$ cd 项目名

$ heroku create

$ git push heroku master

$ heroku ps:scale web=1

$ heroku open

执行完以上语句后,若弹出新窗口显示出你项目的东西,你已经成功的将项目以app的形式放在远程上,可通过heroku'随机生成的名字'+.herokuapp.com当成域名访问.


mongodb mlab

mlab是mongodb的一个远程库,使用方法和mongodb一样,但需要到官网注册个账号,再新建一个库,(!)还要新建 库的使用账号和密码(不是注册的账号密码),完成以上步骤后才能使用.

joephon commented 7 years ago

总结得比较粗略哦。