2011-11-23 87 views
0

我正在关注一本名为Node Web Developments的书中的node.js教程。为什么要将它作为数组传递而不是字符串?

问题:在代码中,一个数组[]包含HTML代码从mult-node.js传递到所需的功能htutil.page()作为第三个参数,以及在htutil.js通过exports.navbar()exports.page()返回的2个值中的一个的一部分,但我不为什么它必须是一个数组而不是一个长串?我没有看到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')) 
     ); 
} 

回答

2

从我可以看到它不是传递一个数组 - 它加入它变成一个字符串传递之前,英寸

原因是字符串加入是(至少应该是)比重复连接,这当然取决于join的实现,但我想大多数实现会优化它。 JavaScript没有StringBuffer或StringBuilder类型,所以加入数组是最接近你的。

+0

没有把方括号里面的HTML括起来[[...]'把冒号分隔的字符串变成数组? – Nyxynyx

+0

@Nyxynyx:是的,但最后的'.join('\ n')'调用将数组转换为一个字符串。 –

+0

明白了,谢谢! – Nyxynyx

相关问题