使用express和marked返回渲染的markdown

2024-05-01

因此,我正在运行一个小型测试应用程序,以在访问路线时返回 html 中的 markdown 文件的内容。我正在使用标记来呈现降价(https://github.com/chjj/marked 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 时,我得到 -

类型错误:无法调用未定义的“替换”方法 请将此事报告给https://github.com/chij/marked https://github.com/chij/marked.

我相当确定我正在尝试发送一个字符串,并且 res.send('Hello World!') 工作得很好。抱歉,我对 Node 和 Express 都很陌生,所以我仍在弄清楚。任何帮助深表感谢。


如果您想将文件的数据分配给变量,您应该尝试fs.readFileSync() http://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_options method.

同步解决方案

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。

承诺信息:

使用 Promise 在 JavaScript 中进行异步编程 http://blogs.msdn.com/b/ie/archive/2011/09/11/asynchronous-programming-in-javascript-with-promises.aspx

Promise.js https://www.promisejs.org/

Bluebird https://www.npmjs.com/package/bluebird#quick-start(另一个承诺库)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用express和marked返回渲染的markdown 的相关文章

随机推荐