所以我有一个渲染页面的控制器.在控制器中,我从模型中调用多个函数来创建自己的会话.例如:
def page(request):
userid = authenticated_userid(request)
user = User.get_by_id(userid)
things = User.get_things()
return {'user': user, 'things': things}
Run Code Online (Sandbox Code Playgroud)
我在模型中的位置:
class User:
...
def get_by_id(self, userid):
return DBSession.query(User)...
def get_things(self):
return DBSession.query(Thing)...
Run Code Online (Sandbox Code Playgroud)
我的问题是,是为每个函数最优创建一个新会话,还是应该在控制器中启动一个会话并在整个控制器中使用相同的会话(假设我既要查询也要插入控制器中的数据库)?防爆.
def page(request):
session = DBSession()
userid = authenticated_userid(request)
user = User.get_by_id(userid, session)
things = User.get_things(session)
...
return {'user': user, 'things': things}
class User:
...
def get_by_id(self, userid, session=None):
if not session:
session = DBSession()
return session.query(User)...
def get_things(self, session=None):
if not session:
session = DBSession()
return session.query(Thing)...
Run Code Online (Sandbox Code Playgroud) 我想保存对文档所做的更改.最简单的方法是存储对文档所做的实际更改.我的意思是说:
var changes = {
$set: {
text: 'Some text.'
}
}
db.posts.update({
_id: _id
}, changes)
db.changes.insert({
postid: _id,
changes: changes
})
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误(有充分的理由):
Error: key $set must not start with '$'
Run Code Online (Sandbox Code Playgroud)
存储更改的最简单方法是什么?
或许我正在接近问题并且你有一个更好的解决方案.我希望用户能够看到人们对任何帖子或事实上的任何变化的日志.我不打算每次改变都有功能.编辑文本只是对文档进行更改的众多方法之一.
node.js中可用的哪些值组合为node.js中每台服务器上的每个进程创建唯一的ID?现在,我只知道如何获取进程ID。
我正在尝试使用一些包含图像的瓷砖进行砌体布局.这是我的代码:
var $mainContent = $('#main-content');
$mainContent.imagesLoaded(function() {
$mainContent.masonry()
});
loadMore = function() {
$.ajax({
url: '/things',
success: function (data) {
var $data = $(data);
$data.imagesLoaded(function() {
$mainContent.append($data).masonry('appended', $data, true)
})
}
})
}
$('#load-more').on('click', loadMore)
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此操作时,我在Chrome的控制台中收到以下错误:
Uncaught TypeError: Cannot read property 'width' of undefined
Run Code Online (Sandbox Code Playgroud)
跟踪:
bB jquery.min.js:2
f.each.f.cssHooks.(anonymous function).get jquery.min.js:4
f.extend.css jquery.min.js:4
f.each.f.fn.(anonymous function) jquery.min.js:4
e.extend.access jquery.min.js:2
f.each.f.fn.(anonymous function) jquery.min.js:4
f.each.f.fn.(anonymous function) jquery.min.js:4
$.Mason._placeBrick jquery.masonry.js:246
$.Mason.layout jquery.masonry.js:172
$.Mason._appended jquery.masonry.js:352
$.Mason.appended jquery.masonry.js:341
Run Code Online (Sandbox Code Playgroud)
我正在使用Masonry v.2.1.05和jQuery v1.7.2
但是,当我改为reload代替时appended,它就像在演示中一样,但我希望从底部填充帖子,我不希望重新计算所有帖子.
你知道发生了什么吗? …
我有这样的目录
/Workspace
/app
app.js
/lib
/public
/styles
*.css
/scripts
*.js
/views
*.jade
Run Code Online (Sandbox Code Playgroud)
从app.jsin app,我有以下代码:
libPath = __dirname + '/../lib'
... express stuff ...
app.configure(function() {
app.set('view', libPath + '/views')
... express stuff ...
app.use(express.static(libPath + '/public'))
... rest of the app ...
Run Code Online (Sandbox Code Playgroud)
现在,问题是Jade找不到任何视图,但找到了所有静态资产.因此,app.set('view')不起作用,但是express.static.如果我将views目录复制到app,使用__dirname + '/views'工作正常.任何人都知道为什么会这样吗?
做app.get('view'),我得到一个这样的目录:/Users/jong/Workspace/app/../lib/views.我尝试做绝对路线/Users/jong/Workspace/lib/views也无济于事.这个目录适用于静态资产但不适用于模板,这很奇怪.
我在 travis 中遇到这个错误,我不知道它是什么意思:
/home/travis/.nvm/v0.11.13/bin/node:1
(function (exports, require, module, __filename, __dirname) { ELF
^
SyntaxError: Unexpected token ILLEGAL
Run Code Online (Sandbox Code Playgroud)
它也不适用于我的本地 OS X - 它只是停止。这是什么意思?
参考:https : //travis-ci.org/normalize/shorthands.js/builds/32499909
每当我对我的应用程序进行更改时,nodemon都会重新启动整个应用程序,但每次发生这种情况时,我的会话都会被销毁.这很烦人,因为每次我对我的应用程序进行更改时都必须登录.我该如何避免这种情况发生?
我正在使用基于cookie的会话,因为我只存储用户ID.我的设置看起来像这样(在coffeescript中):
app.use express.cookieParser()
app.use express.session
secret: 'mysecretkey'
app.use express.csrf()
Run Code Online (Sandbox Code Playgroud)
我通过这样做保存我的会话:
req.session.userid = user._id.toHexString() # it's a mongoDB ObjectID
req.session.save()
Run Code Online (Sandbox Code Playgroud) 假设我有这样的doc结构:
thing: {
name: {
first: "John",
last: "Doe"
}
}
Run Code Online (Sandbox Code Playgroud)
说我只想更新姓氏.我要发送哪个命令进行更新?
$set: {
name: {
first: "Connor"
}
}
Run Code Online (Sandbox Code Playgroud)
要么
$set: {
"name.first": "Connor"
}
Run Code Online (Sandbox Code Playgroud)
有区别吗?还是偏好?我更喜欢第一个,因为它类似于实际文档,但mongodb文档使用第二种方法.