作为一名新手,我开始“开发”一些应用程序。这个想法是用户填写表单,然后我在其他站点的帮助下改变它(表单)数据,最后在 socket.io 的帮助下将其返回给用户
该过程可能需要几秒钟,因此我尝试使用 socket.io 部分传回数据 - 这样用户就可以开始浏览数据,而其余数据仍在计算或传输中。我什至为此添加了一些图表 - 这样当所有数据都被扔给用户时,用户就会收到通知,这样他就可以浏览结果,而无需任何进一步的更改/更新。
TL:DR - 然后概念工作得很好,但是作为一个新手,我在正确维护我的代码并将其切成碎片方面遇到了问题,因为现在总共需要 5k 行噩梦。
想要修改代码的用户肯定会遇到包含它的问题,因此他们无法轻松使用它。
表单中的代码在如下路由中接收:
var express = require('express');
var app = express();
var router = express.Router();
var request = require('request');
var body_parser = require('body-parser');
var module1 = require('./module1.js');
router.post('/page', function(req, res) {
// globalS object
var globals = {
a : 'a',
b : 'b',
c : 'c', // and so on...
mutatedData1 = '',
mutatedData2 = ''
};
// form data (from the form that action is set to "/page" and method is "post")
var fomrData = req.body.form_input_name;
// request to get first part of the data
var dataMutation = request('https://www.facebook.com', function(err, resp, body) {
if (resp.statusCode === 200) {
globals.mutatedData1 = body.substr(0, 100);
// page render (I'm using ejs template)
res.render('page');
// another request to get second part of the data
var otherPageRequest = request('https://www.google.com', function(error, response, content) {
globals.mutatedData2 = content.substr(0, 100);
});
// lets suppose thet here are more request, more calculation, more emits, recursion, loops, callbacks etc.
// and this is going for 5 thousands lines of code...
// so for example the next request I would like to make, could be placed in a module1, then the code could look cleaner and more friendly to the user that want to use it/modify it
}
});
});
module.exports = router;
所以我可以举一个例子,如何将我的代码切入模块,因为现在我什至不看代码或碰它就头疼。
我已经尝试构建其余模块所需的全局模块,但是请求的每个用户只是将数据添加到全局对象(其中包含旧数据!),并且不创建新的实例它 - 仅针对此特定请求。因此,数据数量不断增长,但并未给出正确的结果。
TL:DR - 每次用户填写表单时,我都需要拥有可通过所有模块使用的新全局对象,以便他们可以更新其中的数据。 旧的全局对象数据不得污染 - 当我在本地主机上打开另一个浏览器并填写表单时,应用程序将仅使用这些新数据,并且不会将旧数据与新数据混合在一起。
知道如何解决这个问题吗?感谢您的任何帮助/指导/链接。
最佳答案
我可能理解不正确,但似乎你可以使用某种形式的“id”(也许是socket.io id)。基本上,而不是 global = {data} 具有 global[id] = {data},然后每个模块都会传递这个 id,它们可以使用它来引用正确的数据。您可以在每个模块的顶部添加类似 var globalData = global[id];
的内容,然后您所要做的就是将“global”的每个实例重命名为“globalData”。
如果我误解了什么,请告诉我!
关于javascript - 如何为每个指定(node env,express fr)路由发布请求创建可以变异并可通过所有模块使用的全局 obj 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58878463/