小编Ben*_*wer的帖子

如果提供了String,则Mongoose布尔验证无用

为了更容易验证我的输入,我试图确保只有特定字段设置为true才能创建mongoose文档(此字段当然总是正确的,如果文档实际上是正确创建的,则用于报告原因).

这是一个简化的poc:

var mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/playground')

var Schema = mongoose.Schema

var TestSchema = new Schema({
  testField: {
    type: Boolean,
    required: true
  }
})

// Try to ensure, that testField can only be true
TestSchema
  .path('testField')
  .validate(function (testField) {
    return (testField === true || testField === 'true')
  }, 'Test-field must be true!');

var Test = mongoose.model('test', TestSchema);


var newDoc = Test({
  testField: 'some random string'
})

newDoc.save(function (err, newDoc) {
  (err) ? console.log(err): console.log('newDoc was created')
})
Run Code Online (Sandbox Code Playgroud)

问题是,即使我提供的是随机字符串而不是布尔值或"布尔字符串"(例如"false"或"true"而不是false/true),文档仍然可以正确保存,标志设置为true. …

validation mongoose mongodb node.js

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

NodeJs:fs.stat()或fs.access()检查文件夹是否存在?

我目前正在尝试找出在存储文件之前检查本地文件夹是否存在的“正确”方法,并且nodejs文档有些混乱。

fs.exists()已被废弃,你应该fs.stat()或fs.access()使用。到目前为止,一切都很好。

fs.stat():

不建议在调用fs.open(),fs.readFile()或fs.writeFile()之前使用fs.stat()检查文件是否存在。而是,用户代码应直接打开/读取/写入文件,并在文件不可用时处理引发的错误。

这说明我应该尝试编写,捕获错误,创建文件夹,然后重试。即使我正在移动/重命名文件,我也可以,所以我不直接使用上述三个功能之一。

然后,文档说:

要检查文件是否存在而不随后对其进行操作,建议使用fs.access()。

由于我不是真正在修改文件,而是“仅”修改内容,因此有人可能会认为这是修改的方法。

但是再一次,fs.access()文档详细介绍了为什么这也是一个坏主意:

不建议在调用fs.open(),fs.readFile()或fs.writeFile()之前使用fs.access()检查文件的可访问性。这样做会引入竞争条件,因为其他进程可能会在两次调用之间更改文件的状态。而是,用户代码应直接打开/读取/写入文件,并处理无法访问文件时引发的错误。

Yadda yadda yadda,已经有一些相关的问题(herehere),但是是否有不超过两年的“最佳实践”的官方信息?

fs node.js

5
推荐指数
2
解决办法
1865
查看次数

标签 统计

node.js ×2

fs ×1

mongodb ×1

mongoose ×1

validation ×1