2016-10-11 8 views
0

служу статический веб-страницу с Node.js через курьерский веб-сервер:Простейший способ интегрировать динамический контент в статический обслуживаемой страницу на Node.js с помощью экспресса

app.use('/', express.static('public')); 

Что является наиболее минималистичным способом интегрировать некоторые динамические контента, например список элементов, которые извлекаются из базы данных на такую ​​страницу? я вижу возможность «фальшивый» в .js файл на сервере, который на самом деле динамически создается и затем загружается в index.html, который находится в папке public на сервере:

app.get('/myScript.js', (req, res) => { 
    data = getDataFromDatabase(); 
    res.send('var data1 = ' + data[0] + '; var data2 = ' + data[1]); 
}); 

Это кажется очень Hacky и I интересно, какой лучший минималистский подход к этому.

+1

Учитывая, что вы просите разумный подход. Если данные не изменят все, что часто или находится под вашим контролем, вы даже можете записать файл при изменении данных и вообще не нужно будет динамически. Однако одна вещь, которую следует учитывать, - это вернуть данные, поскольку JSON поможет вам справиться с различными проблемами экранирования текста. – bknights

+0

Если я правильно понял, вы в основном хотите получить данные и визуализировать эти данные на своей главной странице? Если это так, почему бы не использовать движок просмотра, например, ejs? – n0m4d

+0

@ n0m4d Я искал минимальное решение без просмотра движков, но вижу, что это действительно может быть дорога. Спасибо. – Sebastian

ответ

0

Вы также можете вернуть ответ от обратного вызова внутри вашего маршрута получения. Я делаю что-то вроде этого:

Конечная точка:

router.get('/people', (req, res) => { 
    People.list((error, response) => { 
     if (error) return res.end(); 
     return res.send(response); 
    }); 
}); 

Модель:

module.exports = { 
    connect: (callback) => { 
     r.connect({ 
      host: config.db.host, 
      port: config.db.port, 
      db: config.db.name 
     }) 
     .then((connection) => { 
      return callback(null, connection); 
     }) 
     .error((err) => { 
      return callback(err); 
     }); 
    }, 
    list: function (callback) { 
     this.connect((err, connection) => { 
      if (err) return callback(err); 
      r.db(config.db.name).table(config.db.tables.people) 
      .run(connection) 
      .then((cursor) => { 
       return cursor.toArray(); 
      }) 
      .then((users) => { 
       return callback(null, users); 
      }) 
      .error((err) => { 
       return callback(err); 
      }); 
     }); 
    }, 
    ... 

С этого времени я получаю объект ответа, выводимой на моем экране. Код модели - это код rethinkdb, но вы можете заменить его тем, что вы используете. Извините, если это не совсем то, что вам нужно. Желаем удачи с вашей сборкой =)

+0

Я не вижу, что это существенно отличается от примера в моем вопросе. Основное различие заключается в том, что вы передаете 'res.send' из обратного вызова. – Sebastian

+0

Вы правы. Я просто показывал другой способ справиться с этим с обратным вызовом, чтобы вернуть ваш объект ответа. –

 Смежные вопросы

  • Нет связанных вопросов^_^