Почему это должно быть передано как массив, а не строка? - PullRequest
0 голосов
/ 23 ноября 2011

Я следую руководству по node.js из книги под названием Node Web Developments.

Проблема: В одной части кода массив [], содержащий HTML-код, передается из mult-node.js в требуемую функцию htutil.page() в качестве третьего аргумента, а 2значения, возвращаемые exports.navbar() и exports.page() в htutil.js, но я не могу понять, почему это должен быть массив, а не длинная строка?Я не вижу кода в htutil.page(), который извлекает массив в длинную строку, где он будет отображаться на странице HTML.

htutil.js

var url = require('url');

exports.loadParams = function(req, res, next) {
    req.requrl = url.parse(req.url, true);
    req.a = (req.requrl.query.a && !isNaN(req.requrl.query.a))
        ? new Number(req.requrl.query.a)
        : NaN;
    req.b = (req.requrl.query.b && !isNaN(req.requrl.query.b))
        ? new Number(req.requrl.query.b)
        : NaN;
        if(next) next();
}

exports.navbar = function() {
    return ["<div class='navbar'>",
            "<p><a href='/'>Home</a></p>",
            "<p><a href='/mult'>Multiplication</a></p>",
            "<p><a href='/square'>Square's</a></p>",
            "<p><a href='/factorial'>Factorial's</a></p>",
            "<p><a href='/fibonacci'>Fibonancci's</a></p>".
            "</div>"].join('\n');
}

exports.page = function(title, navbar, content) {
    return ["<html><head><title>{title}</title></head>",
            "<body><h1>{title}</h1>",
            "<table><tr>",
            "<td>{navbar}</td><td>{content}</td>",
            "</tr></table></body></html>"].join('\n');
            .replace("{title}", title, "g")
            .replace("{navbar}", navbar, "g")
            .replace("{content}", content, "g");
}

mult-node.js

var htutil = require('./htutil');
exports.get = function(req, res) {
    res.writeHead('200', {'Content-Type': 'text/html'});
    var result = req.a * req.b;
    res.end(
        // THIS IS THE FUNCTION WHERE THE ARRAY OF HTML CODE IS PASSED INTO
        htutil.page('Multiplication', htutil.navbar(), [
            (!isNaN(req.a) && !isNaN(req.b) ?
                ("<p class='result'>{a} * {b} = {result}</p>"
                .replace('{a}', req.a)
                .replace('{b}', req.b)
                .replace('{result}', req.a * req.b))
                : ""),
            "<p>Enter numbers to multiply</p>",
            "<form name='mult' action='/mult' method='get'>",
            "A: <input type='text' name='a' /><br>",
            "B: <input type='text' name='b' />",
            "<input type='submit' value='Submit' />",
            "</form>"
            ].join('\n'))
        );
}

1 Ответ

2 голосов
/ 23 ноября 2011

Из того, что я вижу, он не передает массив - он соединяет его в строку перед передачей.

Причина этого в том, что объединение строк (по крайней мере предположительно) более эффективно, чем повторное объединениеэто, конечно, зависит от реализации join, но я думаю, что большинство реализаций оптимизируют его.В JavaScript нет типа StringBuffer или StringBuilder, поэтому присоединение к массиву - это самая близкая вещь, которую вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...