文档章节

meteor方法

y
 yihong酱
发布于 2017/09/07 01:33
字数 751
阅读 15
收藏 0
点赞 0
评论 0

1.Account

  login(phoneNumber: string, code: string): Promise<void> {
    return new Promise<void>((resolve, reject) => {
      Accounts.verifyPhone(phoneNumber, code, (e: Error) => {
        if (e) {
          return reject(e);
        }

        resolve();
      });
    });
  }

 

2.发布和订阅

1.在server端发布

 Meteor.publish('time', function() {
     ...
    });

2.在client端订阅

后面可以带参数或者控制器函数

Meteor.subscribe('time', id)
Meteor.subscribe('time', {
          onReady: function() {
            console.log('the server called this.ready()')
         },
         onError: function() {
           console.log('error on the server')
         }
});

客户端也要创建新的mongo实例,然后通过订阅后的服务器的数据会推送到该实例上,但是只存在于内存中,所有对数据库的操作必须通过服务器的mongo实例进行操作!

3.配合react事件函数取消订阅

componentWillUnmount() {
    this.props.handle.stop();
  }

export default createContainer(() => {
  return {
    time: Time.find().fetch(),
    handle: handle
      };
     }, Timer)
const handle = Meteor.subscribe('time', {          
     onReady: function() {
            console.log('the server called this.ready()')
         },
         onError: function() {
           console.log('error on the server')
         }});
handle.stop() // will call onStop(callback) on the server.
handle.ready() // returns true if the server called ready()

4.在服务器端写就绪和取消订阅的处理

利用this.ready() this.stop() this.onStop()

Meteor.publish('time', function() {
   let self = this;
   self.added('time', id, time); // notify if record is added to the collection time
  this.ready(); // notify that the initial dataset was sent

   self.onStop(function () {
   self.stop()
   console.log('stopped called')
   Meteor.clearInterval(interval); // clear the interval if the the client unsubscribed
  });
});

3.延迟函数

 Meteor.setInterval(function() {
        newTime();
     }, 1000);

 Meteor.clearInterval(interval);

4.数据库操作

默认可以直接在客户端对数据库进行操作,删除secure包后,只能调用服务器的方法对数据进行操作,而如果直接在客户端调用collection.insert()之类的方法,最终的结果只会存储在客户端的minimogo中

1.定义方法

import { Meteor } from 'meteor/meteor';

Meteor.methods({
cartInsert: function(product) {
      CartCollection.insert({
       'title' : product.title,
       'price' : product.price,
       'inventory' : product.inventory,
       'quantity': 1
 });

2.然后在客户端使用

import { Meteor } from 'meteor/meteor';

export const addToCart = (product) => {
   Meteor.call('cartInsert', product);
};

对于返回数值的可采用promise

   cartTotal: function() {
    let total = CartCollection.aggregate([
        { $project: {"priceByquantity":{ $multiply: [ "$price", "$quantity" ] } }},
        { $group: { "_id": "null", "totalPrice": { $sum: "$priceByquantity" } } }
        ]);
     return total;
 }

用aggregate计算总价钱,$project来产生一个"priceByquantity"的新键, "_id": "null"表示把所有的加起来,"totalPrice"为赋值的对象,最终得到的值包裹在data中

export const getCartTotal = () => {
  return new Promise((resolve, reject) => {
 Meteor.call('cartTotal', (error, data) => {
       if (error) {
          reject(error)
      }
     if(!data[0]){
        resolve(0)
     }
      resolve(data[0].totalPrice)
    })
 });
};

使用promise来包裹,利用then还有catch来对其中的数据进行操作

 getCartTotal().then(result => {
      self.setState({
        totalPrice: result
      })
    }).catch(error => {
      alert('error')
    });

由于promise是异步的,而container本身是异步的,其内部只能使用同步的方法,所以把getCartTotal()放在组件事件周期中使用

 componentDidMount() 
 componentWillReceiveProps()

只有初始化和props改变的时候

5.验证和模型

import { check } from 'meteor/check';
check('title' : product.title,string)
check( product, CartCollection.simpleSchema())

不常用!!

 meteor add aldeed:simple-schema
let CartSchema = new SimpleSchema({
  _id: {
    type: String,
    optional: false
  },
  price: {
    type: Number,
    decimal: true   设为false则为整数
  },
  quantity: {
    type: Number,
    defaultValue: 1,
    optional: true
  },
  department: {
    type: String,
    optional: false
  }
});

department是必须的,验证完模型后再insert

直接使用collection2会自动每次校正格式(meteor add aldeed:collection2)

CartCollection.attachSchema(CartSchema)
check( product, CartCollection.simpleSchema());
//弃用
CartCollection.schema.validate(product);
CartCollection.schema.clean(product);
check( product, CartCollection.schema);
//在每次插入前去掉product里面不必要的部分,使其规范化
CartCollection.insert({....})

6.用户登录

meteor add accounts-password
allanning:roles
Accounts.creatUser({email:444,password:6665})
Meteor.loginWithPassword(email,password)
Meteor.logout(fuc(err){})
Meteor.users.findOne()
Meteor.user()--获取当前用户

© 著作权归作者所有

共有 人打赏支持
y
粉丝 0
博文 24
码字总数 5279
作品 0
汕头
程序员
Meteor 接入微信,验证微信公众平台,成为开发者模式

进行微信开发的第一步是要接入,验证服务器地址的有效性。 官网没有meteor的demo。网上也有很多介绍各种平台的验证方法。但是meteor验证token的方法网上还找不到。因为meteor与nodejs 有很深...

肖思中 ⋅ 2017/12/02 ⋅ 0

Meteor,单一开发语言的全栈开发的平台!

一、全栈开发平台 - 不仅仅是前端 Meteor和那些名声如雷贯耳的前端框架,比如Angular, React等都不一样,它是一个采用单一开发语言的全栈开发的平台:开发者可以使用JavaScript同时 进行前端...

笔阁 ⋅ 2015/10/09 ⋅ 1

Meteor——不一般的全栈开发平台!

一、全栈开发平台 - 不仅仅是前端 Meteor和那些名声如雷贯耳的前端框架,比如Angular, React等都不一样,它是一个 采用单一开发语言的全栈开发的平台:开发者可以使用JavaScript同时 进行前端...

笔阁 ⋅ 2015/09/15 ⋅ 0

Mac下运行Rocket.chat

1,简介 github Rocket.chat是特性最丰富的Slack开源替代品之一 主要功能:群组聊天,直接通信,私聊群,桌面通知,媒体嵌入,文件上传,语音/视频聊天,截图等等 Rocket.chat原生支持windows...

funnycoderstar ⋅ 2017/09/17 ⋅ 0

DDPClient.NET

DDPClient.NET 是一个 DDP (Distributed Data Protocol) 的 .NET 客户端开发包。 DDP 是 Meteor 所使用的协议。使用 DDPClient.NET 你可订阅发布的条目或者带哦用 Meteor 方法并在 ASP.NET ...

匿名 ⋅ 2012/09/24 ⋅ 0

Meteor笔记

Meteor Meteor应用的文件结构 在 文件夹中的代码只会在服务端运行 在 文件夹中的代码只会在客户端运行 其他代码则同时运行于服务端和客户端 文件夹中的文件将被优先载入 所有以命名的文件将在...

isNeilLin ⋅ 2017/11/17 ⋅ 0

Meteor应用的启动过程分析

使用Meteor创建和运行一个应用是非常简单的,而简单的背后就是繁杂的细节。我们希望通过分析源码,抽丝剥茧,来理解这简单背后的细节之美。 meteor v0.9.0.1 运行一个应用 首先我们得创建一个...

hoolev ⋅ 2015/03/23 ⋅ 0

RethinkDB 的 JavaScript 实现--Reqlite

Reqlite 是 ReQL 服务器的 JavaScript 实现方式。也就是说你可以使用 RethinkDB 的驱动程序来连接 Reqlite 服务器。 优势: 为节点开发人员提供了一个简单的方法来测试代码,且不需要启动 Re...

大胖森 ⋅ 2015/05/21 ⋅ 0

解决Cannot find module ‘meteor/meteor’ ‘meteor/check’ ‘meteor/mongo’

meteor 对typescript的支持上存在问题,造成typescript中引入的一些包无法找到。 解决方法: 添加 meteor.d.ts 的定义补充文件到/ 下载位置: vim /typing.d.ts 完成,如果仍有未定义的函数,...

踏雪秋菊 ⋅ 2016/12/22 ⋅ 0

使用wrapAsync封装异步接口

Meteor提供的wrapAsync接口可以把异步函数封装成同步函数。封装后的函数在服务端既可以作为异步函数(传入回调函数)也可以作为同步函数使用(不传入回调函数)。在客户端(浏览器端)还是需要传入...

hoolev ⋅ 2015/03/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 52分钟前 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部