小编los*_*ion的帖子

缓解POST响应的"最佳"练习

所以这里没什么新鲜的,我只是想弄清楚一些,似乎无法在其他帖子中找到任何内容.

我正在创造一个新的资源,说:

/books (POST)
Run Code Online (Sandbox Code Playgroud)

身体:

{
  title: 'The Lion, the Witch and the Wardrobe',
  author: 'C. S. Lewis'
}
Run Code Online (Sandbox Code Playgroud)

我知道我应该返回201(Created),其中包含新资源的Location头:

Location: /books/12345
Run Code Online (Sandbox Code Playgroud)

我似乎无法回答的问题是服务器应该在体内返回什么.

我经常做这种反应:

{
  id: 12345,
  title: 'The Lion, the Witch and the Wardrobe',
  author: 'C. S. Lewis'
}
Run Code Online (Sandbox Code Playgroud)

我这样做有几个原因:

  1. 我为像angularjs这样的前端框架编写了api.在我的特定情况下,我使用角度资源,我经常只需要资源的ID来找到它.如果我没有在响应正文中返回id,我需要从Location头解析它.
  2. 在所有书籍的GET中,我通常返回整个对象而不仅仅是id.从这个意义上说,我的客户端代码不必区分从哪里获取id(位置标题或正文).

现在我知道我真的在这里的灰色区域,但大多数人都说回归整个资源是"坏"的做法.但是,如果服务器更改/添加信息到资源,该怎么办?它肯定会添加id,但也可能添加其他内容,如时间戳.在我不返回整个资源的情况下,最好是进行POST,返回id,然后让客户端执行GET以获取新资源.

rest angularjs angularjs-resource

194
推荐指数
2
解决办法
15万
查看次数

Mongoose,更新对象数组中的值

有没有办法更新对象中的值?

{
  _id: 1,
  name: 'John Smith',
  items: [{
     id: 1,
     name: 'item 1',
     value: 'one'
  },{
     id: 2,
     name: 'item 2',
     value: 'two'
  }]
}
Run Code Online (Sandbox Code Playgroud)

假设我想更新id = 2的项目的名称和值项目;

我尝试了以下w/mongoose:

var update = {name: 'updated item2', value: 'two updated'};
Person.update({'items.id': 2}, {'$set':  {'items.$': update}}, function(err) { ...
Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于它更新/设置整个对象,因此在这种情况下我丢失了id字段.

有没有更好的方法在mongoose中设置数组中的某些值但是只留下其他值?

我也只是询问了这个人:

Person.find({...}, function(err, person) {
  person.items ..... // I might be able to search through all the items here and find item with id 2 then update the values I want …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js

74
推荐指数
7
解决办法
10万
查看次数

MongoDB,从数组中删除对象

文档:

{
   _id: 5150a1199fac0e6910000002,
   name: 'some name,
   items: [{
      id: 23,
      name: 'item name 23'
   },{
      id: 24,
      name: 'item name 24'
   }]
}
Run Code Online (Sandbox Code Playgroud)

有没有办法从数组中提取特定对象?IE如何从items数组中提取id为23的整个item对象.

我试过了:

db.mycollection.update({'_id': ObjectId("5150a1199fac0e6910000002")}, {$pull: {id: 23}});
Run Code Online (Sandbox Code Playgroud)

但是我很确定我没有正确使用'pull'.根据我的理解,pull将从数组中提取字段而不是对象.

任何想法如何将整个对象拉出阵列.

作为奖励,我试图在mongoose/nodejs中执行此操作,并且不确定这种类型的东西是否在mongoose API中但我找不到它.

javascript arrays mongoose mongodb node.js

71
推荐指数
5
解决办法
6万
查看次数

布尔值上的ng-repeat过滤器

我试图在ng-repeat中过滤一个布尔值.

未注册用户列表:

    <h3>Unregistered Users</h3>
    <div ng-repeat="user in users | filter:!user.registered">
        <div class="row-fluid">
        <div class="span2">
          {{user.name}}
        </div>
      </div>
    </div>
Run Code Online (Sandbox Code Playgroud)

注册用户列表:

    <h3>Registered Users</h3>
    <div ng-repeat="user in users | filter:user.registered">
        <div class="row-fluid">
        <div class="span2">
          {{user.name}}
        </div>
      </div>
    </div>
Run Code Online (Sandbox Code Playgroud)

有没有一种很好的方法来过滤注册和!注册.

angularjs angularjs-ng-repeat angularjs-filter

61
推荐指数
3
解决办法
7万
查看次数

将 Android kotlin 版本升级到 1.5.0 在构建时抛出错误消息

使用 kotlin 版本“1.4.32”运行我的 Android 项目运行和构建。尝试升级到 kotlin '1.5.0' 并且我的构建抛出:

Execution failed for task ':app:kaptDefaultsDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
   > java.lang.reflect.InvocationTargetException (no error message)
Run Code Online (Sandbox Code Playgroud)

我什至不知道从哪里开始寻找。还有其他人在升级到 kotlin 1.5.0 时遇到问题吗?

android kotlin

42
推荐指数
7
解决办法
8682
查看次数

Mongodb:多个集合或一个带索引的大集合

我需要帮助在mongo中建模我的数据.我的大部分经验都是关系数据库,我刚刚开始使用mongo.我正在为不同的事件建模数据.

  1. 每个'事件'都有相同的字段.
  2. 每个"事件"将有数百到数百万个文档/行
  3. 事件是动态的,即将根据需要创建新事件.也许可以创建一个新的"2016年夏季奥运会"活动.

可能最重要的是,在处理事件(CRUD操作)时,用户必须指定事件名称.

到目前为止,我可以看到几种方法可以做到这一点,我不想在将数据模型设置为"错误"方面犯下重大错误.

1)一个'事件'集合,包含所有事件的数据."事件"名称的索引.查询看起来像:

db.events.find({event: 'Summer Olympics 2012');
{event: 'Summer Olympics 2012', attributes: [{name: 'joe smith', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'jane doe', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'john avery', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'ted williams', .... }

db.events.find({event: 'Summer Olympics 2013'})
{event: 'Summer Olympics 2013', attributes: [{name: 'steve smith', .... }
{event: 'Summer Olympics 2013', attributes: [{name: 'amy jones', .... }
Run Code Online (Sandbox Code Playgroud)

2)每个新事件的集合,带有收集以跟踪所有事件名称.事件名称不需要索引,因为每个事件都存储在不同的集合中.

// multiple collections, create …
Run Code Online (Sandbox Code Playgroud)

mongodb

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

Swagger UI在部署时显示错误(验证)

我在我的应用程序中嵌入了swagger ui.当我在本地运行我的节点应用程序时,UI工作得很好.

然而,当我将UI部署到我的"真正的"服务器时,我在我的招摇ui的右下方得到一个错误图像:

在此输入图像描述

我确信这是我正在做的事情,它搞砸了,但我不知道.当我通过http访问swagger ui时,再次在本地工作.

但是当我部署时,我通过apache运行并通过https服务,我看到一个错误.更糟糕的是,在部署时,我的"试用"调用都没有.似乎没有提出请求.

看起来UI使用我的swagger.json调用验证器,但该调用在本地工作.

我究竟做错了什么?

当我点击错误图标时,我得到:

在此输入图像描述

swagger swagger-ui

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

如何使用gradle管理第三方deps的不同支持库版本?

我有一堆第三方库,我包含在我的基础应用程序中.我无法控制那些第三方模块包含的支持库.这使我很难在我的应用程序中拥有相同版本的android支持库.

当我可以从每个依赖项中排除某些库时,我知道使用gradle:

compile('com.test:lib1:1.0.0') {
    exclude group: 'com.android.support'
}
Run Code Online (Sandbox Code Playgroud)

然而,有大量的支持库,并将它们全部排除在我的第三方库的每一个看起来像是矫枉过正.

有没有更好的办法?

阅读这篇博文:https://www.devsbedevin.com/android-understanding-gradle-dependencies-and-resolving-conflicts/

它表明:

configurations.all {
  resolutionStrategy {
    preferProjectModules()
  }
}
Run Code Online (Sandbox Code Playgroud)

但是当使用它时,我仍然在我的gradle文件中的Android Studio中收到警告,检测到有多个版本的支持库.

如果我的依赖项依赖于支持库的不同版本,我该怎么办?在上面的任何一种情况下,我都会强迫第三方库使用它们未构建的特定版本的支持库.我应该使用哪个版本?最新的支持库?Min支持所有第三方依赖的库?

这是一个最小的gradle文件示例,显示了第三方依赖项,每个依赖项依赖于它们自己的支持库版本.

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.2'

    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 17
        targetSdkVersion 25
    }
}

configurations.all {
    resolutionStrategy {
        preferProjectModules()
    }
}

dependencies {
    compile 'com.android.support:support-v13:26.0.0'
    compile 'com.test:lib1:1.0' // depends on support-v13:25.0.0
    compile 'com.test:lib2:1.0' // depends on support-v13:25.2.0
    compile 'com.test:lib3:1.0' // depends on support-v13:25.4.0
    compile 'com.test:lib4:1.0' // depends on support-v13:26.0.0
}
Run Code Online (Sandbox Code Playgroud)

Android studio提供以下警告:

在此输入图像描述

android dependency-management gradle android-studio android-gradle-plugin

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

Mongoose findOneAndUpdate无效

我试图在mongoose中使用'findOneAndUpdate',我发送的更新的JS对象没有保存到mongo.保存时我没有收到错误,但是我确实为更新的对象取回了null.我有什么想法可能做错了吗?这个示例是尝试更新存储在mongo中的整个对象,即覆盖名称对象.

var query = {"_id": id};
var update = {name: {first: 'john', last: 'smith'}};
var options = {new: true};
People.findOneAndUpdate(query, update, options, function(err, person) {
  if (err) {
    console.log('got an error');
  }

  // at this point person is null.
});
Run Code Online (Sandbox Code Playgroud)

mongoose node.js

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

验证Passport.js中的访问/组

我想使用passport.js来验证当用户点击某些端点时,他们不仅拥有正确的密码,而且是特定组的成员或具有特定访问权限.

为简单起见,如果我有访问级别的USER和ADMIN.

我可以使用护照来验证密码:

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function(err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));
Run Code Online (Sandbox Code Playgroud)

然后使用路线我可以确保用户通过身份验证:

app.get('/api/users',
  passport.authenticate('local'),
  function(req, res) {
    res.json({ ... });
  });
Run Code Online (Sandbox Code Playgroud)

但是,让我们说你需要有一个ADMIN访问来命中/ api/users'.我需要编写自己的策略吗?IE我需要有本地用户和本地管理员策略,并在每个验证适当的访问级别?

我想我可以很容易地做到这一点,但是当我需要我的网站有不同的auth方法(可能有时使用oauth)时会出现问题,我需要为每个方法编写自定义*-user,*-admin策略.似乎有点矫枉过正.

其他选项是在用户通过身份验证后验证每条路由中的访问/组.但如果可能的话,我宁愿在中间件中这样做.

谢谢

node.js passport.js

30
推荐指数
1
解决办法
2万
查看次数