我想从文件夹中读取文件,然后返回结果加上一些xhtml:
#! /usr/bin/env node
var fs = require('fs'),
files = fs.readdirSync(__dirname + '/files/')
var manifest = function() {
files.forEach((file) => {
return `<item href="${file}.html" id="html30" media-type="application/xhtml+xml"/>`
})
}
console.log(manifest())
但是,{p> console.log(manifest())
返回undefined
。不确定原因,因为console.log(contents)
返回结果:
foo 1
foo 2
foo 3
答案 0 :(得分:1)
从forEach
返回字符串不会分配任何内容,因为ForEach
不会产生任何副作用。来自mdn
forEach()为每个数组元素执行一次回调函数;与map()或reduce()不同,它总是返回undefined值并且不可链接。典型的用例是在链的末尾执行副作用。
您需要reduce
覆盖您的文件(变成字符串)或改变变量。
var manifest = function() {
return files.reduce((items, file) => {
let contents = fs.readFileSync(__dirname + '/files/' + file, 'utf8')
return items + `<item href="${file}.html" id="html30" media-type="application/xhtml+xml"/>`
}, '');
}