所以这里没什么新鲜的,我只是想弄清楚一些,似乎无法在其他帖子中找到任何内容.
我正在创造一个新的资源,说:
/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)
我这样做有几个原因:
现在我知道我真的在这里的灰色区域,但大多数人都说回归整个资源是"坏"的做法.但是,如果服务器更改/添加信息到资源,该怎么办?它肯定会添加id,但也可能添加其他内容,如时间戳.在我不返回整个资源的情况下,最好是进行POST,返回id,然后让客户端执行GET以获取新资源.
有没有办法更新对象中的值?
{
_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) 文档:
{
_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中但我找不到它.
我试图在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)
有没有一种很好的方法来过滤注册和!注册.
使用 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 时遇到问题吗?
我需要帮助在mongo中建模我的数据.我的大部分经验都是关系数据库,我刚刚开始使用mongo.我正在为不同的事件建模数据.
可能最重要的是,在处理事件(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) 我在我的应用程序中嵌入了swagger ui.当我在本地运行我的节点应用程序时,UI工作得很好.
然而,当我将UI部署到我的"真正的"服务器时,我在我的招摇ui的右下方得到一个错误图像:
我确信这是我正在做的事情,它搞砸了,但我不知道.当我通过http访问swagger ui时,再次在本地工作.
但是当我部署时,我通过apache运行并通过https服务,我看到一个错误.更糟糕的是,在部署时,我的"试用"调用都没有.似乎没有提出请求.
看起来UI使用我的swagger.json调用验证器,但该调用在本地工作.
我究竟做错了什么?
当我点击错误图标时,我得到:
我有一堆第三方库,我包含在我的基础应用程序中.我无法控制那些第三方模块包含的支持库.这使我很难在我的应用程序中拥有相同版本的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
我试图在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) 我想使用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 ×4
mongodb ×3
mongoose ×3
android ×2
angularjs ×2
arrays ×1
gradle ×1
javascript ×1
kotlin ×1
passport.js ×1
rest ×1
swagger ×1
swagger-ui ×1