使用 express 和 marked 返回呈现的降价
returning rendered markdown with express and marked
所以我是 运行 一个小型测试应用程序,用于在访问路由时 return html 中 markdown 文件的内容。我正在使用标记来呈现降价 (https://github.com/chjj/marked)。
这是我目前所拥有的 -
app.get('/test', function(req, res) {
var path = __dirname + '/markdown/test.md'
var file = fs.readFile(path, 'utf8', function(err, data) {
if(err) {
console.log(err)
}
return data.toString()
})
res.send(marked(file))
})
当我导航到 localhost:3000 时,我得到 -
TypeError: 无法调用未定义的方法 'replace'
请将此报告给 https://github.com/chij/marked。
我相当确定我正在尝试发送一个字符串,它 res.send('Hello World!') 工作正常。抱歉,我对 Node 和 Express 都不熟悉,所以我还在想办法。非常感谢任何帮助。
如果你想把文件的数据赋值给一个变量,你应该试试fs.readFileSync()
方法。
同步解决方案
app.get('/test', function(req, res) {
var path = __dirname + '/markdown/test.md';
var file = fs.readFileSync(path, 'utf8');
res.send(marked(file.toString()));
});
异步解决方案
app.get('/test', function(req, res) {
var path = __dirname + '/markdown/test.md';
fs.readFile(path, 'utf8', function(err, data) {
if(err) {
console.log(err);
}
res.send(marked(data.toString()));
});
});
承诺解决方案
var Promise = require('bluebird'); // Require 'bluebird' in your package.json file, and run npm install.
var fs = require('fs');
var path = require('path');
Promise.promisifyAll(fs);
app.get('/test', function (req, res) {
fs.readFileAsync(path.join(__dirname, '/markdown/test.md')).then(function(val) {
res.send(marked(val.toString()));
});
});
因为异步编程将继续下一步,运行前一个在单独的线程中,访问在回调函数之外异步分配的数据可能会导致竞争条件。如果你想异步使用它,你可以在异步回调函数中处理响应,也可以将其转换为promise。
承诺信息:
Asynchronous Programming in JavaScript with Promises
Bluebird(另一个承诺库)
所以我是 运行 一个小型测试应用程序,用于在访问路由时 return html 中 markdown 文件的内容。我正在使用标记来呈现降价 (https://github.com/chjj/marked)。
这是我目前所拥有的 -
app.get('/test', function(req, res) {
var path = __dirname + '/markdown/test.md'
var file = fs.readFile(path, 'utf8', function(err, data) {
if(err) {
console.log(err)
}
return data.toString()
})
res.send(marked(file))
})
当我导航到 localhost:3000 时,我得到 -
TypeError: 无法调用未定义的方法 'replace' 请将此报告给 https://github.com/chij/marked。
我相当确定我正在尝试发送一个字符串,它 res.send('Hello World!') 工作正常。抱歉,我对 Node 和 Express 都不熟悉,所以我还在想办法。非常感谢任何帮助。
如果你想把文件的数据赋值给一个变量,你应该试试fs.readFileSync()
方法。
同步解决方案
app.get('/test', function(req, res) {
var path = __dirname + '/markdown/test.md';
var file = fs.readFileSync(path, 'utf8');
res.send(marked(file.toString()));
});
异步解决方案
app.get('/test', function(req, res) {
var path = __dirname + '/markdown/test.md';
fs.readFile(path, 'utf8', function(err, data) {
if(err) {
console.log(err);
}
res.send(marked(data.toString()));
});
});
承诺解决方案
var Promise = require('bluebird'); // Require 'bluebird' in your package.json file, and run npm install.
var fs = require('fs');
var path = require('path');
Promise.promisifyAll(fs);
app.get('/test', function (req, res) {
fs.readFileAsync(path.join(__dirname, '/markdown/test.md')).then(function(val) {
res.send(marked(val.toString()));
});
});
因为异步编程将继续下一步,运行前一个在单独的线程中,访问在回调函数之外异步分配的数据可能会导致竞争条件。如果你想异步使用它,你可以在异步回调函数中处理响应,也可以将其转换为promise。
承诺信息:
Asynchronous Programming in JavaScript with Promises
Bluebird(另一个承诺库)