2017-09-23 45 views
0

router.js代码的未定义 '取代':节点JS无法读取物业使用正则表达式


var file = __dirname + '\\text\\article.txt'; 

fs.readFile(file, 'utf8', function(err, data) { 

    var regexp1 = /\{title:(.*)\}/ig; 
    var matches1 = regexp1.exec(data); 
    data = data.replace(regexp1, ''); 

    var regexp2 = /\[img:([0-9]{1,4})\]/ig; 
    var matches2; 
    while ((matches2 = regexp2.exec(data)) != null) { 
     data = data.replace(matches2[0], '<img src=\"../../imgs/' + matches2[1] + '.png\" /\>'); 
    } 

    var regexp3 = /(?:\r\n|\r|\n)/g; 
    data = data.replace(regexp3, '<br />'); 

    respond.render('view.pug', { 
     title: matches1[1], 
     article: data 
    }); 
}); 

(?为什么码框自动断开/我用线来区分)

,如果我在网站上访问,控制台有以下错误:


C:\Dev\whitenoise\testsite\router.js:29 
data = data.replace(regexp1, ''); 
     ^   

类型错误:无法读取属性在ReadFileContext.callback的未定义 '替换'(C:\开发\白噪声\测试网站\ router.js:29:16) 在FSReqWrap.readFileAfterOpen [按的onComplete](fs.js :366:13)


这是什么?我找不到解决方案,请帮助

+0

检查由控制台记录的数据将是不确定的。 –

+0

可能有一个错误'功能(错误,数据)'你没有检查。 –

回答

0

您的数据变量未定义,这意味着在读取文件时可能会出现一些错误,很可能与其路径有关。添加

var file = __dirname + '\\text\\article.txt'; 
console.log(file); 

并检查结果是否会导致您的文件。另外,由于您正在读取服务器上的文件,因此您应该使用url,而不是路径。因此,它也许应该像

var file = __dirname + '/text/article.txt'; 

以“/”,而不是“\\”