Возвращение предоставленной уценки с экспрессом и пометкой
Поэтому я запускаю небольшое тестовое приложение для возврата содержимого файла уценки в html при посещении маршрута. Я использую отмеченный для визуализации уценки ( 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 я получаю -
Ошибка типа: Невозможно вызвать метод replace вместо undefined Пожалуйста, сообщите об этом на https://github.com/chij/marked.
Я почти уверен, что пытаюсь отправить строку, и это res.send ("Hello World!") Работает просто отлично. Извините, я новичок как в Node, так и в экспрессе, так что я все еще разбираюсь. Буду признателен за любую оказанную помощь.
1 ответ
Если вы хотите присвоить данные файла переменной, попробуйте 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()));
});
});
Поскольку асинхронное программирование переходит к следующему шагу, выполнение предыдущего в отдельном потоке, доступ к данным, назначенным асинхронно вне функции обратного вызова, может привести к состоянию состязания. Если вы хотите использовать его асинхронно, вы можете либо обработать ответ внутри функции асинхронного обратного вызова, либо преобразовать его в обещание.
Информация об обещаниях:
Асинхронное программирование в JavaScript с обещаниями
Синяя птица (Еще одно обещание lib)