我对Node.js /
Express很陌生,并且将它用作AngularJS应用程序的后端。我到处都在StackOverflow上寻求有关此问题的帮助,但似乎无法弄清楚如何将建议移植到我的代码中。
我的应用程序如下工作:
我无法使用Node的模块,因为我不知道如何在Express控制器中引用套接字实例。
如您所见,在server.js中,socket.io在此处实例化。但是,我希望控制器本身可以使用socket.io实例发出logs.js。
如何在控制器中引用io? 我不确定如何将io实例传递给控制器,以便发出消息?
以下是一些Node代码:
server.js
var app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
require('./lib/config/express')(app);
require('./lib/routes')(app);
server.listen(config.port, config.ip, function() {
console.log('Express server listening on %s:%d, in %s mode', config.ip, config.port, app.get('env'));
});
io.set('log level', 1); // reduce logging
io.sockets.on('connection', function(socket) {
console.log('socket connected');
socket.emit('message', {
message: 'You are connected to the backend through the socket!'
});
});
exports = module.exports = app;
routes.js
var logs = require('./controllers/logs'),
middleware = require('./middleware');
module.exports = function(app) {
app.route('/logs')
.post(logs.create);
}
logs.js
exports.create = function(req, res) {
// write body of api request to mongodb (this is fine)
// emit log message to angular with socket.io (how do i refer to the io instance in server.js)
};
您可以使用基于标准JS闭包的模式。主要输出logs.js
不是控制器功能本身,而是工厂功能,它将接受所有需要的依赖关系并创建控制器:
exports.create = function(socket) {
return function(req, res) {
// write body of api request to mongodb
socket.emit();
}
}
然后,当您要使用它时:
app.route('/logs').post(logs.create(socket));
由于您在单独的程序包中设置了路由,因此必须在中使用相同的模式routes.js
- routes
应该接收套接字以用作参数。
如果您想稍后使用DI处理这些事情,或者使用模拟“套接字”测试您的控制器,则此模式很好用。
问题内容: 我是Node.js和Express的新手,我试图理解这两个似乎是重叠的概念,即路由与控制器。 我看过一些简单的例子,app.js + route / *似乎足以路由所需的各种请求。 但是,我也看到有人在谈论使用控制器,并且有些人暗示使用更正式的MVC模型(???)。 如果有人可以帮助我消除这个谜团,并且如果您有一个在Node.js + Express框架中设置控制器的好例子,那就太好了
问题内容: 因此,我正在为学校项目编码此聊天客户端,现在我需要使用JavaFX实现GUI。我已经在Scene Builder中构建了外观简洁的GUI。现在,无论何时客户端收到一条消息,它都应该在控制器中调用一个方法,以将接收到的字符串附加到TextField上。 但是,当我尝试从FXML文件加载控制器时,出现此错误: 这是获取控制器并在其中调用方法的代码: 最后,我的FXML文件: 加载徽标图像时
我建立了两台服务器:第一台用于前端(localhost:7200),第二台用于后端(localhost:7300)。相应地,在路由“/test”上,前端到后端发出了一个测试请求。 问题在于,当我发送一个json对象(单击“btn”按钮时)时,它会拒绝,并显示以下消息: CORS策略阻止从http://localhost:7300/testhttp://localhost:7200访问XMLHttp
我试图在Joomla组件中构建我的第一个jSON表单提交。 从Joomla控制器发送超文本标记语言响应是否有任何特殊的编码或条件? 我使用的是2.5 Joomla MVC。以下是一些测试/观察结果- 1) 表单提交和响应已单独测试,并按预期工作。我有一个separarate PHP文件,它被提交到一个服务器端PHP文件,该文件接受jSON数据并发送一个HTML响应,客户端根据响应进行正确更新。 2
问题内容: 我正在尝试使用以下代码弹出到根视图控制器: 这通常可行,但是当当前视图是模式视图时,尝试使用此代码时出现错误。在这种情况下,我该如何跳回到根视图控制器? 提前致谢。 问题答案: 您可以检查当前控制器是否存在,如果存在,则将其关闭,然后直接转到当前控制器。
问题内容: 为什么无法从另一个内部访问其他控制器方法呢? 像这样。 已编译 如果您不能这样做,那为什么不呢?我还应该怎么做… 问题答案: 最近几个小时遇到相同的问题。我使用了api / services文件夹。它可能不完全是您所需要的,但是它是一个选择。