小编Cam*_*ilo的帖子

为什么Mongoose不会在更新时验证?

我有这个代码

var ClientSchema = new Schema({
  name: {type: String, required: true, trim: true}
});

var Client = mongoose.mode('Client', ClientSchema);
Run Code Online (Sandbox Code Playgroud)

使用express,我使用此代码创建一个新客户端

var client = new Client(req.body);
client.save(function(err, data) {
  ....
});
Run Code Online (Sandbox Code Playgroud)

如果我在表单上留下名称字段为空,则mongoose不允许创建客户端,因为我在架构上按需要设置它.另外,如果我在名称前后留下空格,mongoose会在保存前删除该空格.

现在,我尝试使用此代码更新客户端

var id = req.params.id;
var client = req.body;
Client.update({_id: id}, client, function(err) {
  ....
});
Run Code Online (Sandbox Code Playgroud)

它允许我更改名称,但如果我在表单上将其留空,则mongoose不会验证并保存一个空名称.如果我在名称前后添加空格,则使用空格保存名称.

为什么mongoose在保存时验证但在更新时没有验证?我是以错误的方式做到的?

mongodb:2.4.0 mongoose:3.6.0 express:3.1.0 node:0.10.1

mongoose

48
推荐指数
3
解决办法
2万
查看次数

使用DDP连接两个Meteor应用程序

我有两个需要同步的应用程序.其中一个将从用户接收数据,另一个将显示数据.两个应用程序都可以在不同的服 它们可能在某些时候断开连接,并且需要继续工作直到重新连接,因此我将从第二个应用程序上的第一个应用程序复制数据.

在我发现的Meteor文档中,DDP.connect(url)但我不确定如何使用它.我发现了许多问题和示例,使用DDP将非Meteor应用程序与Meteor连接,但没有关于连接两个Meteor应用程序的问题.

我的第一种方法是这样的:

申请1

Items = new Meteor.Collection('items');
Items.insert({name: 'item 1'});
if (Meteor.isServer) {
  Meteor.publish('items', function() {
    return Items.find();
  });
}
Run Code Online (Sandbox Code Playgroud)

申请2

Items = new Meteor.Collection('items')
if (Meteor.isServer) {
  var remote = DDP.connect('http://server1.com/);
  remote.onReconnect = function() {
    remote.subscribe('items');
    var items = Items.find();
    console.log(items.count());  // expected to be 1 but get 0
  } 
}
Run Code Online (Sandbox Code Playgroud)

在第二个应用程序中,如何从第一个应用程序中获取项目?

meteor

16
推荐指数
1
解决办法
9005
查看次数

如何在流星上创建默认用户?

如果没有用户,我想创建一个管理员用户.我在服务器文件夹中的js文件上尝试过它

Meteor.startup(function () {
  if(!Meteor.users.find().count()) {
    var options = {
      username: 'admin', 
      password: 'default-password', 
      email: 'admin@example.com'
    };
    Accounts.createUser(options);
  }
});
Run Code Online (Sandbox Code Playgroud)

这是流星在控制台上显示的错误

Error
    at app/packages/livedata/livedata_common.js:143:26
    at /Users/camilo/Documents/Proyectos/IM/interno/.meteor/local/build/server/server.js:282:7
    at Array.forEach (native)
    at Function._.each._.forEach (/Users/camilo/.meteorite/meteors/meteor/meteor/0ffea1c4c308ed24906984f99b13b8fca5a0956c/dev_bundle/lib/node_modules/underscore/underscore.js:79:11)
    at run (/Users/camilo/Documents/Proyectos/IM/interno/.meteor/local/build/server/server.js:227:7)
=> Exited with code: 1
Run Code Online (Sandbox Code Playgroud)

我做错了什么或这是一个流星虫?

我正在使用meteor 0.6.1和node.js 0.9.9

node.js meteor

15
推荐指数
3
解决办法
1万
查看次数

Backbone:模型到模板和模板到模型的绑定

我正在将Backbone和Backbone.Marionette集成到现有的Web应用程序项目中.我们计划暂时保留项目中的所有现有功能,但我们将利用Backbone结构和Marionette主体的任何新功能.首要任务之一是确定HTML模板渲染库以及这些模板的数据绑定解决方案.以前,我们一直在使用JsRenderJsViews来满足我们所有的模板需求和数据绑定,但我们愿意为我们的新功能探索新的途径.所以基本上我一直在研究各种解决方案,现在需要一些建议或想法来选择什么.这是我到目前为止所看到的:

Backbone.StickIt:

优点:似乎遵循Backbone的关注点分离的想法,这有助于保持模板非常"干净".

缺点:看起来您必须在视图中编写更多代码来定义绑定.此外,似乎缺乏进行条件渲染的能力,因此您必须始终渲染完整模板并切换某些元素的显示.

Rivets.js:

优点:在模板中处理更多数据绑定选项,而不会使其太乱.

缺点:此外,似乎缺乏条件渲染.

击退/淘汰赛:

优点:通过属性处理各种数据绑定需求.

缺点:使用转换器轻松启动"弄脏"模板.必须添加另一个步骤来从Backbone模型创建Knockout视图模型.

JsViews:

优点:类似于Knockout的能力,但语法不同.处理条件渲染.

缺点:过去我们通过在模板中添加太多业务逻辑来弄脏我们的模板,但这可能是我们可以纠正的开发问题.需要创建将JsViews可观察性功能与Backbone模型事件联系起来的功能.其他库如StickIt和Knockback会自动处理这个问题.

我们还研究了Backbone.ModelBinder,它介于StickIt和Rivets之间.

任何人都可以分享他们做出的任何决定以及为什么他们选择一个插件/库而不是另一个?我也对其他建议持开放态度.谢谢.

data-binding template-engine backbone.js rivets.js marionette

10
推荐指数
1
解决办法
2401
查看次数

如何在流星上创建自动增量字段?

我需要一个自动增量字段,但不是主要ID,它只是为客户支持应用程序的用户提供易于记忆的案例编号.

我发现这篇文章解释了如何在mongodb http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/上创建一个自动增量字段,但这个解决方案还不支持minimongo.

我该如何实现此功能?我不在乎解决方案是否由于错误而跳过一些连续的案例编号,但案例编号必须是唯一的.

是否有另一种方法可以生成唯一且短的案例编号?我不想向用户提供像这样的PxyooJWSKc3sMz6Lc的案例代码,因为他们必须用案例编号来引用他们的问题.

编辑:

Minimong不支持findAndModify,因此我无法使用我发布的链接上列出的第一个解决方案.第二种解决方案还需要在minimongo上不可用的方法.

mongodb node.js meteor

9
推荐指数
1
解决办法
8203
查看次数

"未捕获的TypeError:对象[对象对象]没有方法'关闭'"错误使用事件移动到主干0.9.10

我有这个事件的观点:

var View = Backbone.View.extend({
  el: $('#test'),
  events: {
    "change input": "test"
  },
  test: function(e) {
    console.log("test");
  }
});

var view = new View();
Run Code Online (Sandbox Code Playgroud)

使用主干0.9.9它可以工作,但是使用主干0.9.10我得到了这个错误:未捕获TypeError:对象[object Object]没有方法'off'.我需要改变什么来处理主干0.9.10上的事件?

我正在使用这个cdn

http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.10/backbone -min.js

谢谢

backbone.js backbone-events

7
推荐指数
1
解决办法
5282
查看次数

7
推荐指数
1
解决办法
426
查看次数

如何处理Cordova或Phonegap上android 4.0-4.3和4.4之间的宽度不一致?

我正在Cordova 3.4上做一个应用程序,用Android 4.4.2测试Moto X,用android 2.3测试三星Galaxy Ace和模拟器.我离开cli创建的原始视口:

<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
Run Code Online (Sandbox Code Playgroud)

在CSS上我正在使用相对大小:

html {
    font-size: 62.5%;
}

p {
    font-size: 1.4rem;
}
Run Code Online (Sandbox Code Playgroud)

这在两台设备上都可以正常工作,但是当我使用Android 4.2.2在LG G2上进行测试时,我看到文字较小.我在模拟器上测试了所有4.x Android版本,并在4.0到4.3版本上发现了相同的问题,然后我发现Android 4.4.2现在使用Chrome并且ViewPort的工作方式不同.

根据一些文章,视网膜显示屏上的正常行为就像屏幕一样,css宽度小于设备宽度,这就是它在Android 4.4.2上工作的方式,但在4.0到4.3的工作方式不同.这是使用配置了此参数的仿真器对4.4.2和4.2.2之间的一些javascript属性进行比较:屏幕:4.7",分辨率:720x1280,大小:正常,屏幕比例:长,密度:xhdpi.

4.4.2

- window.devicePixelRatio: 2
- screen.width: 360
- document.width: 360
- window.innerWidth: 360
- document.documentElement.clientWidth: 360
- document.documentElement.offsetWidth: 360
- document.body.clientWidth: 360

4.2.2

- window.devicePixelRatio: 2
- screen.width: 720
- document.width: 720
- window.innerWidth: 720
- document.documentElement.clientWidth: 720
- document.documentElement.offsetWidth: 720
- document.body.clientWidth: 720
Run Code Online (Sandbox Code Playgroud)

我正在尝试的时间解决方案是使用媒体查询,但我认为它可能是平板电脑或其他设备上的问题.

html …
Run Code Online (Sandbox Code Playgroud)

android cordova

7
推荐指数
1
解决办法
3425
查看次数

如何使用mongoose和express从复选框中保存一个布尔值?

我无法想象用express和mongoose保存布尔值的简单方法.我有这个架构:

var ClientSchema = new Schema({
  name: {type: String, required: true, trim: true},
  active: {type: Boolean }
});

var Client = mongoose.mode('Client', ClientSchema);
Run Code Online (Sandbox Code Playgroud)

这是我的控制器

exports.new = function(req, res) {
  var client = new Client();
  res.render('clients/new', { item: client } );  
};

exports.create = function(req, res) {
  var client = new Client(req.body);

  client.save(function(err, doc) {
    if (err) {
      res.render('clients/new', { item: client });
    }
    ....
  });
};
Run Code Online (Sandbox Code Playgroud)

这是我的观点

form(method='post', action='/clients', enctype='application/x-www-form-urlencoded')
  input(type='text', name='name', value=item.name)
  input(type='checkbox', name='active', value=item.active) 
Run Code Online (Sandbox Code Playgroud)

Mongoose有能力在req.body上映射params.在行var client = new …

mongoose express

6
推荐指数
1
解决办法
5642
查看次数

如何使用laika测试Meteor路由器或Iron路由器

我正在使用laika进行测试,使用meteor-router包进行路由.我想做一些导航到某个页面的测试,填写一个表单,提交它并检查成功消息,但我仍然坚持导航部分.这是我的第一次尝试:

var assert = require('assert');

suite('Router', function() {
  test('navigate', function(done, server, client) {
    client.eval(function() {
      Meteor.Router.to('test');
      var title = $('h1').text();
      emit('title', title);        
    })
    .once('title', function(title) {
      assert.equal(title, 'Test');
      done();
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为Meteor.Router.to没有回调,我不知道如何在加载新页面时执行下一行.

我也试过这样的事情

var page = require('webpage').create();

page.open('http://localhost:3000/test', function () { 
  ... 
}
Run Code Online (Sandbox Code Playgroud)

但我得到了错误 Error: Cannot find module 'webpage'

编辑

我正在转向铁路由器,所以任何答案都会有所帮助.

meteor laika

5
推荐指数
1
解决办法
494
查看次数

部分不透明的过渡

我在这里按照指南https://vuejs.org/v2/guide/transitions.html设置弹出窗口及其叠加层的动画。我需要最终不透明度为0.5的叠加层,但Vue最后将其设置为1。我尝试过类似的操作,但是Vue将不透明度设置为0.5,然后在动画结束时突然将其更改为1:

.fade-enter {
  opacity: 0;
}
.fade-enter-active {
  transition: opacity 2s;
}
.fade-enter-to {
  opacity: 0.5;
}
Run Code Online (Sandbox Code Playgroud)

这是一个说明问题的测试https://jsfiddle.net/50wL7mdz/58865/

更新资料

可行的解决方案https://jsfiddle.net/50wL7mdz/58877/无需在渐变类中添加最终的不透明度。

vue.js vuejs2

5
推荐指数
0
解决办法
908
查看次数

如何在 Vue 中创建一个数字输入组件,其限制不允许超出限制范围

我正在尝试在 Vue 中创建一个数字输入组件,其最小值和最大值不允许在没有成功的情况下输入外部限制:

<template id="custom-input">
  <div>
    <input :value="value" type="number" @input="onInput">
  </div>
</template>

<div id="app">
  <div>
    <span>Value: {{ value }}</span>
    <custom-input v-model="value" :max-value="50"/>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)
Vue.component('custom-input', {
  template: '#custom-input',
  props: {
    value: Number,
    maxValue: Number
  },
  methods: {
    onInput(event) {
      const newValue = parseInt(event.target.value)
      const clampedValue = Math.min(newValue, this.maxValue)
      this.$emit('input', clampedValue)
    }
  }
})

new Vue({
  el: "#app",
  data: {
    value: 5
  }
})
Run Code Online (Sandbox Code Playgroud)

在这里小提琴:https : //jsfiddle.net/8dzhy5bk/6/

在前面的示例中,最大值设置为 50。如果我输入 60,它会在输入中自动转换为 50,但如果我输入第三个数字,则允许继续输入。传递给父级的值被限制,但我还需要限制输入,以便不能输入更多数字。

vue.js vuejs2

4
推荐指数
1
解决办法
3011
查看次数