我一直在尝试寻找任何可以解释是否有可能将一个“新”项目(追加)重新呈现到玉模板列表中的帖子。
假设我们有一个日志条目列表,并且在第一次请求时,我们使用res.render和Jades的每个功能,从MongoDB集合“ logs”中呈现一个获取的列表。
由于我们希望从数据库中检索更新,因此该集合还附加了一个MongoWatch,用于监听更改。更新后,我们可以执行一些附加到Jade模板中第一个列表的代码吗?
/* app.js */
/*
Display server log
*/
app.get ('/logs', function(req, res, next) {
// Using Monk to retrieve data from mongo
var collection = db.get('logs');
collection.find({}, function(e,docs){
// watch the collection
watcher.watch('application.logs', function(event){
// Code that update the logs list with the new single entry event.data?
});
// Request resources to render
res.render('logs', { logs: docs } );
});
});
<!-- logs.jade -->
extends layout
block content
div
each log in logs
div.entry
p.url= log.url
也许我应该以另一种方式使用模板引擎,我对Express,Jade还是陌生的,真的很感谢大家花时间解决这些问题。
// 问候
好的,所以我已经听了乔纳森·莱诺夫斯基的建议,对了,谢谢!,我想出了解决我问题的方法。以为我会跟进并在此过程中帮助别人。
基本上我现在正在使用建议的socket.io
因此,首先将socket.io npm模块添加到package.json中,然后运行npm install来安装它,我使用的是“ latest”作为版本。要在客户端上使用“ socket.io.js”,您实际上必须将文件从已安装的socket.io模块复制到javascript文件夹。
Path (seen from project root is): 'node_modules/socket.io/node_modules/socket.io-client/dist/'
在服务器端设置数据库,监视程序,Web服务器,套接字和控制器
/*
SETUP DATABASE HANDLE
in app.js
*/
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:'+app.get('port')+'/application');
/* SETUP DATABASE UPDATE WATCH */
var watcher = new MongoWatch({ format: 'pretty', host: 'localhost', port: app.get('port') });
/* START WEBSERVER AND SETUP WEBSOCKET */
var server = Https.createServer({key: certData.serviceKey, cert: certData.certificate}, app);
var io = require('socket.io').listen(server);
server.listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
/*
Display server log - controller
*/
app.get ('/logs', function(req, res, next) {
// Using Monk to retrieve data from mongo
var collection = db.get('logs');
collection.find({}, function(e,docs){
// watch the collection logs in database application
watcher.watch('application.logs', function(event){
io.sockets.emit('logs', { log: event.data });
});
// Request resources to render
res.render('logs', { logs: docs } );
});
});
在布局中包含socket.io javascript
/*
Add client side script
in layout.jade
*/
script(type='text/javascript' src='/javascripts/socket.io.js')
使用客户端
/*
SETUP DATABASE HANDLE
in logs.jade
*/
extends layout
block content
script.
var socket = io.connect('https://localhost:4431');
socket.on('logs', function (data) {
console.log(data.log);
// Here we use javascript to add a .log-entry to the list
// This minor detail i leave to the developers own choice of tools
});
div.row#logs
div.col-sm-12
div.header-log Some application
div.logs-section
each log in logs
div.log-entry.col-sm-12(data-hook=log.status)
p.method= log.method
p.url= log.url
p.status(style='color: #'+log.color+' !important')= log.status
p.response-time= log.time
p.content-length= log.length
p.datetime= log.date
使用该功能时,请记住,此流程是通过在数据库“应用程序”和集合“日志”中实际添加一行来触发的。
我使用ssl,因此在常规http上,我们改为创建“ http”服务器,并从客户端使用标准地址前缀http://连接。
另外请注意,要使用MongoWatch,需要设置带有复制集的MongoDB。这是一个可用作备用(双重用途)的镜像数据库。
干杯! 再次感谢乔纳森!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句