请求数据库查询后呈现 HTML- 文件。 (nodes.js, pug.js, pouch.db)

Render HTML-File after Request an Database Query. (nodes.js, pug.js, pouch.db)

var url = require('url');
var pug = require('pug');
var PouchDB = require('pouchdb');

var db = new PouchDB('http://127.0.0.1:5984/data');

var doc = {
  "_id": "mittens",
  "name": "Mittens",
};

function query() {db.get('mittens', function (error, doc) {
  if (error) {
    console.log('Ops! There is an error.');
  } else {
    console.log(doc);
    return doc;
  }
});
}

module.exports = {
    handleRequests: function(request, response) {
        response.writeHead(200, {'Content-Type': 'text/html'});
        var path = url.parse(request.url).pathname;
        console.log(path);
        switch (path) {
            case '/':
                response.write(pug.renderFile('./views/index.pug', query()));
                response.end();
                break;

query() 函数正在返回一个带有 "name" 的对象。但它不是由 pug.js.

呈现的

为什么 pug.js 不使用 doc.name 渲染模板?

正如@Paul 在评论中所述,您不能简单地 return 来自异步函数调用的值。你应该使用 callbackspromises:

回调方式:

function query(item, callback) {
  db.get(item, function (error, doc) {
    if (error) {
      callback(error, null);
    } else {
      callback(null, doc);
    }
  });
}

然后:

case '/':
  query('mittens', function(err, doc) {
    if (err) throw err;
    response.write(pug.renderFile('./views/index.pug', doc));
    response.end();
  }
  break;

阅读更多:How do I return the response from an asynchronous call? 并根据您的喜好实施 promise 方式。