抱歉,我对node.js很新,所以我还没有能够解决这个问题.我正在使用Node.js作为iPhone客户端的后端API服务器.我正在使用Passport.js通过本地策略进行身份验证.相关代码如下:
// This is in user.js, my user model
UserSchema.static('authenticate', function(username, password, callback) {
this.findOne({ username: username }, function(err, user) {
if (err){
console.log('findOne error occurred');
return callback(err);
}
if (!user){
return callback(null, false);
}
user.verifyPassword(password, function(err, passwordCorrect){
if (err){
console.log('verifyPassword error occurred');
return callback(err);
}
if (!passwordCorrect){
console.log('Wrong password');
return callback(err, false);
}
console.log('User Found, returning user');
return callback(null, user);
});
});
});
Run Code Online (Sandbox Code Playgroud)
和
// This is in app.js
app.get('/loginfail', function(req, res){
res.json(403, {message: 'Invalid username/password'});
});
app.post('/login',
passport.authenticate('local', …Run Code Online (Sandbox Code Playgroud) javascript authentication node.js passport-local passport.js
我正在使用Passport.js以用户名和密码登录用户.我基本上使用Passport站点的示例代码.以下是我的代码的相关部分(我认为):
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
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);
});
}
));
app.post('/login',
passport.authenticate('local', { failureRedirect: '/login/fail', failureFlash: false }),
function(req, res) {
// Successful login
//console.log("Login successful.");
// …Run Code Online (Sandbox Code Playgroud) 我搜索过但找不到这种行为的原因.
我有一个我正在设置的UIButton图像.以下是按钮的显示方式.请注意,这只是预期按钮设计的Photoshop:

从本质上讲,它是一个方形的自定义UIButton,带有白色边框和一点周围的阴影.在右上角,有一个"X"标记,将以编程方式添加为子视图.
以下是实际应用中按钮的屏幕截图.此时,我只添加了一个阴影和X标记作为子视图:

当我尝试添加白色边框时,它的外观如下:

看起来白色边框出现在X标记子图层上方.我不知道为什么.
这是我正在使用的代码:
// selectedPhotoButton is the UIButton with UIImage set earlier
// At this point, I am adding in the shadow
[selectedPhotoButton layer] setShadowColor:[[UIColor lightGrayColor] CGColor]];
[[selectedPhotoButton layer] setShadowOffset: CGSizeMake(1.0f, 1.0f)];
[[selectedPhotoButton layer] setShadowRadius:0.5f];
[[selectedPhotoButton layer] setShadowOpacity:1.0f];
// Now add the white border
[[selectedPhotoButton layer] setBorderColor:[[UIColor whiteColor] CGColor]];
[[selectedPhotoButton layer] setBorderWidth:2.0];
// Now add the X mark subview
UIImage *deleteImage = [UIImage imageNamed:@"nocheck_photo.png"];
UIImageView *deleteMark = [[UIImageView alloc] initWithFrame:CGRectMake(53, -5, 27, 27)];
deleteMark.contentMode = UIViewContentModeScaleAspectFit; …Run Code Online (Sandbox Code Playgroud) 作为iOS开发人员,我对webdev很新.我正在研究Meteor并对路由有一些疑问 - 如果它们非常容易,我会道歉.
我正在使用Meteor Router程序包创建路由,但我想只有一些页面只能由admin用户访问.
Meteor.Router.add({
'/' : 'home',
'/admin' : 'admin'
});
Run Code Online (Sandbox Code Playgroud)
所以我有一个简单的路由设置如上,但我不知道如何限制访问/ admin路由.
它就像这样简单吗?什么是限制路径到/ admin页面并显示警告或甚至将它们重定向回/页面的好方法?
谢谢!
client.html
<head>
<title>My App</title>
</head>
<body>
{{renderPage}}
</body>
<template name="home">
{{greeting}}
</template>
<template name="admin">
{{greeting}}
</template>
Run Code Online (Sandbox Code Playgroud)
client.js
Template.admin.greeting = function () {
var currentUser = Meteor.user();
if (null !== currentUser && 'admin' === currentUser.username) {
return "Hello Admin!";
}
else{
return "Sorry, only admins can see this page";
}
};
Run Code Online (Sandbox Code Playgroud) 我实际上已经玩弄了Meteor一段时间,但我意识到我仍然缺乏一些(或很多!)对这个主题的理解.
例如,这是一个使用node.js/express/socket.io进行简单实时聊天的教程:http://net.tutsplus.com/tutorials/javascript-ajax/real-time-chat-with -nodejs插槽-IO-和expressjs /
在上面的示例中,通过socket.io,Web服务器接收一些数据并将其传递到所有连接的客户端 - 所有这些都没有任何数据库访问.
使用Meteor,在我看到的所有示例中,通过写入mongodb来更新客户端,mongodb然后更新所有客户端.但是,如果我不需要将数据写入数据库呢?将数据传递给所有客户端似乎是一个昂贵的步骤.
我相信我在这里遗漏了一些东西.更新所有客户端的Meteor方式是什么(比如简单的聊天应用程序),但不需要先花费数据写入数据库?
谢谢!
作为背景,这个问题与我之前发布的这个问题有关:尝试从自定义单元格上的UIButton扩展/折叠UITableViewCell
总而言之,我有一个带有几个自定义表格单元格的UITableView.每个自定义UITableViewCell都有一个文本区域,后面是"查看更多"按钮.基本上,每个单元格最初将显示3行文本,但是当用户点击"查看更多"按钮时,单元格应扩展到整个文本区域高度.再次点击按钮将使单元格崩溃.
我认为这很难想象,所以我在这里拍了一段简短的视频:http://dl.dropbox.com/u/762437/cell-animation.mov
(它大约是一个3.5mb的文件,所以不应该花那么长的时间来加载).在视频中,我展示了一个进行展开/折叠动画的单元格.进行扩展时,"查看更多"按钮会向下动画.当再次点击它时,它只会跳回到原始位置而没有动画. 编辑:对不起,我应该更清楚.UITableView正确地为单元格设置动画,我要问的是如何正确地使"查看更多"按钮动画化.
我有扩展/崩溃工作(无论我做错了是另一回事!),但动画并不像我期望的那样工作.扩展动画有效,但不是崩溃.
在每个自定义UITableViewCell类中,当用户点击"查看更多"按钮时,我会调用一个IBAction.我还跟踪当前在NSMutableArray中展开的单元格.当用户点击"关闭"按钮时,该单元格将从阵列中删除.
在我的tableView的cellForRowAtIndexPath中,我检查数组以查看哪些单元格应该展开,哪些单元格应该以默认大小显示.
我正在使用此代码:
// Check if the array contains the particular cell, if so, then it needs to be expanded
if([expandedRows containsObject:indexPath])
{
// Expand the cell's text area to fit the entire contents
[cell.textLabel sizeToFitFixedWidth:cell.textLabel.frame.size.width];
// Find the new Y-position of where the "Close" button.
// The new Y position should be at the bottom of the newly expanded text label
CGFloat bottomYPos = cell.textLabel.frame.origin.y + cell.textLabel.frame.size.height;
// Get …Run Code Online (Sandbox Code Playgroud) 对于那些一直在用这个twitter-clone帮助我的人,谢谢!在你的帮助下,我成功地完成了大部分工作,最后到了追随者功能的最后几步.
现在,我有一个包含以下字段的数据集:用户名,推文,日期
数据的示例可能如下所示:
Username Tweet Date
kenny hi! 2011-10-07 19:07:00
stan hello 2011-10-05 18:07:00
kenny looks like rain 2011-10-05 17:07:00
stan hello 2011-10-05 14:07:00
cartman authoritay! 2010-10-05 14:07:00
Run Code Online (Sandbox Code Playgroud)
我一直在努力研究产生数据集的SQL语句,其中每个用户只出现一次最新的推文.所以,基于上面的内容,看起来像这样:
Username Tweet Date
kenny hi! 2011-10-07 19:07:00
stan hello 2011-10-05 18:07:00
cartman authoritay! 2010-10-05 14:07:00
Run Code Online (Sandbox Code Playgroud)
我一直在谷歌搜索SQL搜索并尝试过COUNT,DISTINCT,MAX的变种,但无济于事.任何帮助将不胜感激!谢谢!
我有一个应用程序,底部有一个可拖动的UIView.可拖动的视图不完全在屏幕外,并且具有用户可以向上或向下拖动的"拉片".向上和向下拖动当前有效,但我想给它与Apple通知滑出抽屉相同的行为.
例如,如果我将视图向上拖出50%并从屏幕上移开我的手指,那么我希望可拖动的视图继续向上移动.同样,如果用户仅将视图拖出,例如向上30%,则视图应该回落到其默认位置.
理想情况下,虽然我可以上下拖动,但动作并非"有机"......
现在,我正在通过UIPanGestureRecognizer完成向上和向下拖动,以防万一与问题相关.
它是否可能与可拖动视图的Y位置的某些聪明的数学有关,然后用一些CAAnimations进行其余的移动?
可视化可能有点困难,所以我在下面添加了一些屏幕.
谢谢!
iphone core-animation draggable uiview uipangesturerecognizer
我正在尝试在我的Meteor应用程序中实现搜索.我不完全理解它是如何联系在一起的.此时,我有以下代码:
HTML:
<form class="navbar-search pull-left">
<input type="text" class="search-query" placeholder="Search">
</form>
Run Code Online (Sandbox Code Playgroud)
JS:
Template.menubar.events({
'keyup input.search-query': function (evt) {
console.log("Keyup value: " + evt.which);
if (evt.which === 13) {
console.log("Got an Enter keyup");
Session.set("searchQuery", "justATestVar");
}
}
});
Run Code Online (Sandbox Code Playgroud)
当我按下不同的键进入搜索框时,我可以看到键盘的值,所以我知道事件正在被击中.捕获"输入"键盘也可以,但按Enter键会导致输入站点重新加载,当我这样做时:
Session.get("searchQuery")
Run Code Online (Sandbox Code Playgroud)
它返回undefined.
我不知道我是否正确处理了这个问题.基本上,我只想从搜索框中获取值,然后使用该值对我的集合进行搜索.任何帮助,将不胜感激!谢谢.
我使用的是最新的Android Studio 0.2.6和最新的ZBar Android SDK.到目前为止我做了什么:
在我的build.gradle文件中,编辑它以便它现在是:
依赖{compile'com.android.support:support-v4:13.0.0'编译文件('libs/zbar.jar')}
09-01 16:06:02.026:W/dalvikvm(7050):异常Ljava/lang/UnsatisfiedLinkError; 在初始化Lnet/sourceforge/zbar/ImageScanner时抛出;
09-01 16:06:02.036:E/AndroidRuntime(7050):java.lang.UnsatisfiedLinkError中:致无法加载库:link_image [1891]:209无法负载所需的库 'libiconv.so' 的"libzbarjni.so '(load_library [1093]:未找到库'libiconv.so')
09-01 16:06:02.036:E/AndroidRuntime(7050):at net.sourceforge.zbar.ImageScanner.(Unknown Source)
看看我的MainActivity中的代码,它似乎在这里濒临死亡:
/* Instance barcode scanner */
scanner = new ImageScanner();
Run Code Online (Sandbox Code Playgroud)
这似乎告诉我,我不知道我没有正确导入我的Zbar库文件.任何有关如何获得这个非常基本的例子的帮助将不胜感激!
请注意,如果我使用Android Studio从ZBar Android SDK示例导入新项目,它会编译并运行正常.但是,它使用的是旧的ant构建系统.我宁愿使用新的gradle构建系统,这就是为什么我要将ZBar导入到一个全新的Android 0.2.6项目中.谢谢!
另一个注意事项:我尝试将我的构建gradle修改为接受的答案:如何更改Gradle中的libs目录?它不起作用.

iphone ×3
meteor ×3
node.js ×2
android ×1
calayer ×1
draggable ×1
express ×1
javascript ×1
mysql ×1
passport.js ×1
sql ×1
uianimation ×1
uitableview ×1
uiview ×1
z-order ×1
zbar ×1