【问题标题】:NodeJS - how to manage username and task management without using external databases?NodeJS - 如何在不使用外部数据库的情况下管理用户名和任务管理?
【发布时间】:2016-06-28 07:54:08
【问题描述】:

我有以下代码,其中 1 个用户发送 Ajax 查询以启动一项任务(洗衣机),一段时间后它再次执行 Ajax 查询以检查该任务(洗涤)是否完成?

我如何跟踪此类任务 (不使用/涉及任何重量级的 MySQL、postgreSQL,而只是数组和对象?)

const https = require('http');
const fs = require('fs');
const url = require('url');

var taskID = 0;
var task = false;

https.createServer((req, res) => {
  try {
    var query =url.parse(req.url,true).query;
    if(query.id=='1') { // Add Task
      res.writeHead(200);

      task = true;
      taskID++;

      console.log('OK - matched: ' + 
                  '1 - execute task now, please come back soon' +
                  '2 - task is not complete yet ' +
      );

      function_do_task_on_end_make_task_flag_false();


    } else if(query.id=='2') { // Check Task status
      res.writeHead(200);
      if(task) {
        res.end("busy");
      } else {
        res.end("done:" + taskID);
      }

    } else {
      res.writeHead(404);     
      console.log('NO - match');
      res.end("req " + query.id);
    }



  } catch(e) {
    console.log(e);
  }
}).listen(8000);

编辑:

// http://stackoverflow.com/questions/38070287/nodejs-how-to-manage-username-and-task-management-without-using-external-datab?noredirect=1#comment63578743_38070287 
// On server start load data from file
var storage = {tasks: []};
fs.readFile('database.json', function(err, data) {
  if(err) throw new Error(err);
  storage = JSON.parse(data);
});

// On incoming request
if (query.id == '1') {
  // Add task to variable storage
  storage.tasks.push({taskId: query.id, taskName: query.name});
}
else if (query.id == '2') {
  res.json(storage);
}

// Update database persistent file
fs.writeFile('database.json', JSON.stringify(storage), function (err) {
  if (err) throw new Error('Error while serializing DB'); else console.log('DB updated!');
});

【问题讨论】:

  • 尝试将所有内容序列化为一个大的 JSON 文档,并在每次更改时将其保存到文件中。在开始时也加载它。不是一个完美的解决方案,但对于非常小规模的项目应该“足够好”。
  • 什么意思?你有例子吗?
  • 当然:var storage = {tasks:[]}; ... if (query.id == '1') { storage.tasks.push({ taskId: query.id, taskName: query.name }); } else if (query.id == '2') { res.json(storage); } fs.writeFile('database.json', JSON.stringify(storage), function(err) { if (err) throw new Error('Error while serializing DB'); else console.log('DB updated!'); });
  • 很抱歉格式不好,这里是改进版:gist.github.com/RafalWilinski/8053599d086c0e649bd1aa13d15992fb
  • 非常好,谢谢

标签: javascript ajax node.js google-chrome


【解决方案1】:

您可以使用内存而不是数据库。查看node-cache

【讨论】:

    猜你喜欢
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    相关资源
    最近更新 更多