请求数据库查询后呈现 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 来自异步函数调用的值。你应该使用 callbacks 或 promises:
回调方式:
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 方式。
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 来自异步函数调用的值。你应该使用 callbacks 或 promises:
回调方式:
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 方式。