How to use Node.js to build pages that are a mix between static and dynamic content?

前端 未结 7 1097
隐瞒了意图╮
隐瞒了意图╮ 2020-12-07 23:02

All pages on my 5 page site should be output using a Node.js server.

Most of the page content is static. At the bottom of each page, there is a bit of dynamic conten

7条回答
  •  广开言路
    2020-12-07 23:27

    First deliver only static HTML files from server to the client. Then use something like AJAX / server.io to serve the dynamic content. IMO Jade is really ugly for writing HTML code and its better to use a template engine.

    I did some Google and found some code by this fellow, its good if you are doing it for PoC / learning.

    var server = require('./server'); 
    var controller = require("./controller"); 
    var urlResponseHandlers = require("./urlResponseHandlers");   
    
    var handle = {};   
    handle["/"] = urlResponseHandlers.fetch; 
    handle["/fetch"] = urlResponseHandlers.fetch; 
    handle["/save"] = urlResponseHandlers.save;   
    server.start(controller.dispatch, handle); 
    

    Here is how the logic for handling URLs is displayed -

    var staticHandler = require('./staticHandler');
    
    function dispatch(handler, pathname, req, res) {
      console.log("About to dispatch a request for " + pathname);
      var content = "Hey " + pathname;
      if (typeof handler[pathname] === 'function') {
          content += handler[pathname](req);
          res.writeHead(200, {
              'Content-Type': 'text/html'
          });
          res.write(content);
          res.end();
      } else {
          console.log("No request handler found for " + pathname);
          staticHandler.handleStatic(pathname, res);
      }
    

    }

    Here is how static files can be handled -

    function handleStatic(pageUrl, response) {
        var filename = path.join(process.cwd(), pageUrl);
        path.exists(filename, function (exists) {
            if (!exists) {
                console.log("not exists: " + filename);
                response.writeHead(404, {
                    'Content-Type': 'text/html'
                });
                response.write('404 Not Found\n');
                response.end();
                return;
            }
            //Do not send Content type, browser will pick it up. 
            response.writeHead(200);
            var fileStream = fs.createReadStream(filename);
            fileStream.on('end', function () {
                response.end();
            });
            fileStream.pipe(response);
            return;
        });
    }
    exports.handleStatic = handleStatic;
    

    I liked the idea. All code copied from this link! .

提交回复
热议问题