如果您想将文件的数据分配给变量,您应该尝试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(另一个承诺库)