javascript - node.js & 表达 : for loop and `app.get()` to serve articles

标签 javascript node.js express

我正在开发一个 node js express 应用程序,它使用 app.get() 来提供不同的网址。所以app.get('/',{});提供主页,app.get('/login'{ });提供登录页面等。

像本例一样,使用 for 循环以编程方式提供页面是一种好习惯吗?

var a = ["a", "b", "c"];
a.forEach(function(leg) {
    app.get('/' + leg, function(req, res){
        res.render('index.ejs', {
            word : leg
        });
    });
});

index.ejs只是 <p><%= word %> </p>

所以site.com/a、site.com/b、site.com/c都是网页。

我想利用它在所有文章标题的列表(来自存储文章的数据库)上运行 .foreach()。

编辑: 该网站允许用户提交帖子,这些帖子将成为数据库中的“文章”。我希望这个循环在发布后路由到新提交的文章。如果我想做 app.get('/' + newPageName);对于用户提交的页面,我已经用 node server.js 启动了服务器,这是如何实现的?

最佳答案

利用中间件更好地处理请求。我假设您将有数十/数百个帖子,像您所做的那样为它们添加路线,并不是那么优雅。

考虑以下代码;我正在定义 /posts/:legId 形式的路线。我们会将所有请求匹配到此路由,获取文章并呈现它。

如果要定义少量路由,您可以使用正则表达式来定义它们。

// dummy legs
var legs = {
  a: 'iMac',
  b: 'iPhone',
  c: 'iPad'
};

app.get('/posts/:leg', fetch, render, errors);

function fetch(req, res, next) {
  var legId = req.params.leg;

  // add code to fetch articles here
  var err;
  if (!legs[legId]) {
    err = new Error('no such article: ' + legId);
  }

  req.leg = legs[legId];
  next(err);
}

function render(req, res, next) {
  res.locals.word = req.leg;
  res.render('index');
}

function errors(err, req, res, next) {
  console.log(err);

  res.locals.error = err.message;
  // render an error/404 page
  res.render('error');
}

希望这对您有所帮助,如有任何问题,请随时问我。

关于javascript - node.js & 表达 : for loop and `app.get()` to serve articles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20434188/

相关文章:

javascript - 检查数组值是否全部不同

javascript - nodejs - csvtojson 未在输出中给出正确的 json 键

node.js - 无法访问 Mongoose 保存回调中的变量

javascript - 在 JavaScript 正则表达式中使用 {1}+ 所有格量词时出现正则表达式错误

javascript - Express - 不呈现 POST 响应

php - 解析 - JSON - 数组的数组

javascript - json 响应中的日期格式不起作用

javascript - jQuery 选择器不适用于 IE7 和 IE8 中动态创建的内容

javascript - Node : Right-To-Left Language Console Log (Arabic)

mysql - 使用池连接在 Nodejs 中编写 mysql 查询