sal*_*der 7 markdown node.js express javascript-marked
因此,我正在运行一个小型测试应用程序,以便在访问路径时以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))
})
Run Code Online (Sandbox Code Playgroud)
当我导航到localhost:3000时,我得到了 -
TypeError:无法调用undefined方法'replace'请将此报告给https://github.com/chij/marked.
我很确定我正在尝试发送一个字符串,而res.send('Hello World!')的工作正常.对不起,我是Node和express的新手,所以我还在搞清楚.任何帮助深表感谢.
Bra*_*ldi 11
如果要将文件的数据分配给变量,则应尝试使用该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()));
});
Run Code Online (Sandbox Code Playgroud)
异步解决方案
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()));
});
});
Run Code Online (Sandbox Code Playgroud)
有希望的解决方案
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()));
});
});
Run Code Online (Sandbox Code Playgroud)
因为异步编程将继续下一步,在单独的线程中运行前一个步骤,访问在回调函数之外异步分配的数据可能会导致竞争条件.如果要异步使用它,可以在异步回调函数中处理响应,也可以将其转换为promise.
承诺信息:
蓝鸟(另一个承诺lib)