我正在尝试在我的用户模型中保存位置的经度/纬度并使用它进行查询 $geoNear
.我已经查看了几乎所有关于该主题的页面,但我仍然不确定如何1)适当地创建模型以及如何查询它.
这是我的模型的一部分:
loc: {
//type: 'Point', // see 1
//type: String, // see 2
coordinates: [Number],
index: '2dsphere' // see 3
},
Run Code Online (Sandbox Code Playgroud)
@ 1:根据文档,如果我想存储一个点,那么类型必须是'Point',但它会抛出
TypeError: Undefined type `Point` at `loc`
Did you try nesting Schemas? You can only nest using refs or arrays.
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为我猜它应该是一个 String
@ 2:这不会立即引发错误,但是当我尝试存储用户时,我得到:
name: 'ValidationError',
errors:
{ loc:
{ [CastError: Cast to String failed for value "[object Object]" at path "loc"]
Run Code Online (Sandbox Code Playgroud)
@ 3:如果我想创建索引,我会得到错误:
TypeError: Undefined type `2dsphere` at `loc.index`
Did you try nesting Schemas? …
Run Code Online (Sandbox Code Playgroud) 我知道这个话题已经有很多主题,但不幸的是我直到现在才找到答案.我使用angular.js和http://angular-js.in/image-upload/中的示例代码从客户端获取图像.这部分有效
现在到node/mongodb部分,这是我的后端模型:
var userSchema = new mongoose.Schema({
avatar: { data: Buffer, contentType: String },
// ...
});
module.exports = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)
和我的节点代码:
exports.createAvatar = function (req, res) {
var avatar = {
data: req.body.data.image, // see below
contentType: 'image/png'
}
models.DUser
.findById(index.findUserId(req))
.exec(function (err, user) {
user.avatar = avatar;
// ...
user.save(function (err, user) {/* ... */ });
Run Code Online (Sandbox Code Playgroud)
和我的angularCtrl:
var foo = {
image: image,
imageName: image.name,
};
$http.post('/api/users', {data: foo })
.success(function (result) { /*...*/ });
Run Code Online (Sandbox Code Playgroud)
除了req.body.data.image,我尝试了许多不同的变体,如req.body.data.image.dataURL,req.body.data.image.dataURL.data,但到目前为止没有任何工作.我对req.body.data.image的记录显示: …
关于如何为我们当前的移动和Web应用程序实现VoIP,我有一个非常普遍的问题.(我们有一个Android + iOS应用程序和一个基于AngularJS/NodeJS的Web应用程序).
我们想要实现的目标
在第一步中,我们希望实现应用程序之间的语音和视频通话.稍后我们可能会扩展到正常电话网络的出站呼叫.但这篇文章主要是为了获取有关如何仅实施我们的第一步的信息.
一般的想法
我们在Asterisk之前有过一些经验,但事实证明这并不容易.因此,对于这个项目,我们希望在实际实现之前获得一些反馈.
关于技术的想法
起初我认为使用WebRTC可能是一个好主意,但由于目前只支持Chrome,FF和Opera,而且几乎不支持原生移动应用程序,我们认为WebRTC目前可能不合适.(或者你认为不是吗?)在网上搜索了一下之后我们发现了这个:http://www.webrtc.org/native-code
有没有人体验过这些libs?在我们看来,这可能是现代voip解决方案的最佳解决方案(并且还允许我们跳过星号服务器)
第二个想法是为我们自己设置一个Asterisk服务器.每次用户登录App时,我都会将他作为SIP客户端连接到星号.如果一个用户调用另一个用户,我们认为我们应该能够使用节点包Asterisk Manager API(https://github.com/pipobscure/NodeJS-AsteriskManager)进行调用.
第三个想法是使用SIP提供商,但目前我不确定这是否真的是最好的主意.
由于我们不是VoIP专家,我们的应用程序中是否还有其他VoIP集成的可能性?
任何有关该主题的想法都将非常感谢!谢谢!
我最近打开了另一个关于如何使用node.js/mongoose在mongodb数据库中存储图像的线程.(用猫鼬保存图像)
我有点工作,但我很确定我目前的方式不是要走的路.这也可能是我无法在前端显示存储的图像的原因.
我有两个问题:
GridFS
angular/node/mongoose 的工作示例?这是我将图像保存到数据库的代码:
var split = req.body.data.image.dataURL.split('base64,');
// ... split until I get 'image/png' and the binary of my image
var avatar = {
data: data,
contentType: type
};
models.UserImages.create({ avatar: avatar, /* ... */})
Run Code Online (Sandbox Code Playgroud)
和我的Angular Ctrl用于加载图像:
User.findAvatarByUser(data).success(function (data) {
$scope.avatar = data[0].avatar.data;
});
Run Code Online (Sandbox Code Playgroud)
这显示了以chrome为单位的日志记录.我得到的错误:
任何帮助将非常感激!
编辑: 在丢失像素提示后,我尝试将图像保存到FS.经过一点点麻烦后我终于开始工作了.目前我将图像保存到我的FS,直到我知道我真正想要处理这个问题.
如果有人有同样的问题,这就是我如何在后端保存我的图像(我发现它在stackoverflow上的某个地方,但不幸的是我丢失了链接以给予合适的人,sry为此;))
fs.writeFile(newImageLocation, data, 'base64', function (err) {
if (err) throw err
console.log('File saved.')
});
Run Code Online (Sandbox Code Playgroud) 我有一个angular.js应用程序,其基本设置如下:我index.html
渲染静态内容,如Top/Sidebar.在里面我必须<div ng-view></div>
显示部分html文件,例如我的home.html
在我登录我的应用程序后index.html
,它的控制器MainCtrl
加载以及我home.html
的相应的加载HomeCtrl
.所以到目前为止应该是一切.
在我实现了一个修复程序之后(这样重新加载就不会"忘记"用户并且我没有注销 - 我基于http://www.sitepoint.com/implementing-authentication-angular-applications/上的示例)我尝试过重新加载我的页面.但现在只有我的home.html
负荷.
注意:我在下面编辑了我的发现
这是有道理的,这是我的一部分app.js
:
$routeProvider.when('/', {
templateUrl: 'views/home.html',
controller: 'HomeCtrl',
resolve: {
auth: function ($q, authenticationSvc) {
var userInfo = authenticationSvc.getUserInfo();
if (userInfo) {
return $q.when(userInfo);
} else {
return $q.reject({ authenticated: false });
}
}
}
})
.when('/login', {
templateUrl: 'views/login.html',
controller: 'LoginCtrl',
login: true
})
Run Code Online (Sandbox Code Playgroud)
很明显,当我加载/
应用程序时,只显示我的home.html
.但是,如果我在登录后正常进入页面时已经拥有了什么?
我的主要问题似乎是目前对我来说,我不太确定index.html
当我登录时如何以及为什么加载正常.这是我在LoginCtrl
SignIn过程完成后在我的工作: …
我正在尝试深入填充一个集合.
例如
// UnitType.js
name: { type: 'string' }
// Unit.js
unitType: {
model: 'unitType',
via: '_id',
required: true,
index: true
}
// Product.js
unit: {
model: 'unit',
via: '_id',
required: true,
index: true
},
Run Code Online (Sandbox Code Playgroud)
问题是, - 据我所知,从互联网研究深入了解
Product.find().populate('unit.unitType');
Run Code Online (Sandbox Code Playgroud)
目前帆不支持.为了达到我想要的结果
unit
.map()
product.unit.unitType
随着回应这当然远非理想.我也尝试toJSON
在模型中使用"预先填充" unitType
- >不起作用,因为这不支持Promises.
在这个问题上,github上有很多线程和PR,但到目前为止我还没有找到解决这个问题的方法.有没有办法让这更好?
在我目前的Wicket应用程序中,我目前在用户点击一个菜单项后进行全页重新加载.我想将此更改为仅重新加载必要的Panel.
我目前在做什么:
我有一个BasePage.html
包含菜单项和一些静态内容:
<li><a wicket:id="home" href="#">Home</a></li>
<li><a wicket:id="user" href="#">User</a></li>
<!-- and so on ->
<div class="panelarea">
<wicket:child />
</div>
Run Code Online (Sandbox Code Playgroud)
和我的(摘要)BasePage.java
:
add(new AjaxSubmitLink("home") {
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
setResponsePage(new HomePage());
}
});
//etc
Run Code Online (Sandbox Code Playgroud)
我的HomePage.html
:
<wicket:extend>
<span wicket:id="homePanel"></span>
</wicket:extend>
Run Code Online (Sandbox Code Playgroud)
我HomePage.java
(以及所有其他页面)然后添加Panel:
add(new HomePanel("homePanel"));
Run Code Online (Sandbox Code Playgroud)
而不是setResponsePage()
我想在<div class="panelarea">
没有重新渲染整个页面的情况下打开Panel .
任何人都可以给我一个提示吗?
我正在尝试从前端到 vertx 后端建立 sock.js 连接。
我最初的尝试是这样的:
let token = '<the token>';
let data = {'Authorization' : 'Bearer ' + token};
let eb = new EventBus("http://localhost:8080/eventbus");
eb.onopen = function () {
eb.registerHandler('notifications', data, (err, msg) => {
// handle the response
});
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为我需要发送有关 EventBus 创建的身份验证数据,即使官方 sock.js 文档指出这不受支持。显然现在发送new EventBus("http://localhost:9090/eventbus", data)
也不起作用。
https://github.com/sockjs/sockjs-node#authorisation
我的后端处理程序:
final BridgeOptions bridgeOptions = new BridgeOptions()
.addOutboundPermitted(new PermittedOptions().setAddress("notifications"))
final SockJSHandler sockJSHandler = SockJSHandler.create(vertx).bridge(bridgeOptions, event -> {
event.complete(true);
});
router.route("/eventbus/*").handler(ctx -> {
String token = ctx.request().getHeader("Authorization"); // null …
Run Code Online (Sandbox Code Playgroud)