网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網

黃秀杰--Node后端優雅使用Bmob

發布時間:2018-04-25 10:50 所屬欄目:小程序開發教程

數據庫CRUD使用JS SDK

對于增刪改查、連表操作,直接使用瀏覽器JS SDK,在bmob.js,https://www.bmob.cn/static/bmob_jssdk_quickstart.zip,僅需加一個module.exports = Bmob導出,就可以在Node使用了,語法與小程序里寫法一樣優雅,比Bmob提供的npm包要好用N倍。

JS SDK的使用xmlhttprequest作ajax請求,所以node下,還要依賴xmlhttprequest npm包,將"xmlhttprequest": "^1.8.0"添加到package.json dependencies里,同樣再加上"localStorage": "^1.0.3"。這樣就改造完成了。

代碼說話,看對比

 

以下是Bmob npm庫

 

  1. var BC = require('bmob');
  2. BC.initialize("9a22a7cb3217e88cac2e81fe7e88c600", "025c1282712e387a62b2bcd5a970f93c");
  3. var db = new BC.Db;
  4. db.find({
  5. "table":"XXX", //表名
  6. "keys":"a,b,c", //返回字段列表,多個字段用,分隔
  7. "where":{"a":"XXXX","b":"XXXX"}, //查詢條件是一個JSON object
  8. //"where":{"c":{"$ne":1}}, //條件查詢 查詢c字段值不為1的記錄
  9. "order":"-a,b", //排序列表,[-]字段名稱,-表示降序,默認為升序
  10. "limit":10, //limit大小,一頁返回多少條記錄,默認為0
  11. "skip":2, //skip,分頁offset,(page-1)*limit
  12. "count":1 //count,只返回符合條件的記錄總數
  13. },function(err,data){ //回調函數
  14. });

注:對于表關聯include操作,一直沒有發現怎么處理,這是一個硬傷,npm庫也2年多沒有維護了。

以下是改造過的瀏覽器JS SDK

 

  1. //app.js
  2. var Bmob = require('./bmob.js');
  3. Bmob.initialize("9a22a7cb3217e88cac2e81fe7e88c600", "025c1282712e387a62b2bcd5a970f93c");
  4. // bmob
  5. var Food = Bmob.Object.extend("Food");
  6. var query = new Bmob.Query(Food);
  7. query.include('category');
  8. query.limit(this.pageSize);
  9. query.skip(this.pageIndex * this.pageSize);
  10. query.find({
  11. success: function(object) {
  12. console.log(object);
  13. },
  14. error: function(object, error) {
  15. alert("query object fail");
  16. }
  17. });

使用connect-multiparty+request.js+RESTFul上傳附件

經過上面的改造,可以操作數據庫,但對于附件上傳,還是要自己再增強

 

  1. 'use strict';
  2. var router = require('express').Router();
  3. var multipart = require('connect-multiparty');
  4. var multipartMiddleware = multipart();
  5. var path = require('path');
  6. var fs = require('fs');
  7. var Bmob = require('../util/bmob.js');
  8. var {appId, appSecret} = require('../util/config');
  9.  
  10. // 添加分類
  11. router.post('/upload', multipartMiddleware, function(req, res) {
  12. console.log('uploading');
  13. // 臨時文件完整路徑
  14. var file_url = req.files.file.path;
  15. // 截取文件名
  16. var filename = path.basename(file_url);
  17. console.log(filename)
  18. /* request 上傳 */
  19. var request = require('request');
  20. request.post({
  21. headers: {
  22. "X-Bmob-Application-Id": appId,
  23. "X-Bmob-REST-API-Key": appSecret
  24. },
  25. url: 'https://api.bmob.cn/2/files/' + filename,
  26. body: fs.readFileSync(file_url)
  27. }, function optionalCallback(err, httpResponse, body) {
  28. if (err) {
  29. return console.error('upload failed:', err);
  30. }
  31. res.send(body);
  32. });
  33. });
  34.  
  35. module.exports = router;

這里要注意,不能像傳統自己服務端那樣使用formData的方式上傳,而是直接給body值——感謝Bmob的magic大大指點,才從坑里出來。

 

  1. //formData: var formData = {
  2. // file: fs.createReadStream(file_url),
  3. //}
  4.  
  5. //或者
  6.  
  7. //formData: var formData = {
  8. // file: fs.readFileSync(file_url),
  9. //}

經過以上2大改造,就可以在Node中優雅得使用Bmob了,我的靈犀外賣后端就是基于這個做出的



易優小程序(企業版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/24049.html 復制鏈接 如需定制請聯系易優客服咨詢:800182392 點擊咨詢
QQ在線咨詢
AI智能客服 ×