#javascript #node.js #express #ejs
#javascript #node.js #экспресс #ejs
Вопрос:
Я получаю ошибку возврата при попытке подстановки переменной типа:
TypeError: Cannot read property 'substr' of undefined
Это мой код:
app.get('/reports/FUHAUHS9029019.CSV', function(req, res, next){
var filepath = req.params.name;
var ffilepath = filepath.substr(0,12);
var filename = req.params.name;
var ffilename = filename.substr(-18);
console.log(ffilepath);
res.send('filename: ' req.params.filepath.substr(-18));
res.download(filename, edifilepath);
});
Как я могу получить подстроку из моего файла? и пытаюсь применить динамический маршрутизатор к этому маршрутизатору, но я также ничего не получаю от этого, кроме ошибки substr.
Большое вам спасибо : D
Комментарии:
1.
req.params
это пустой объект, потому что вы не указали никаких параметров в своем URL-адресе маршрута. Следовательно,req.params.name
являетсяundefined
и, следовательно, вы не можете вызвать.substr()
значениеundefined
. Пожалуйста, опишите, чего вы на самом деле пытаетесь достичь, словами, потому что ваш код не описывает реальную проблему, которую нужно решить здесь.2. Люди могли бы написать лучшие и более полные ответы, если бы вы описали словами, чего именно вы пытаетесь достичь с помощью этого маршрута. В нынешнем виде вопрос довольно неясен. Пожалуйста, покажите примеры нескольких URL, которым вы хотите, чтобы маршрут соответствовал, а затем опишите, чего вы хотите достичь в маршруте.
Ответ №1:
вам нужно установить параметр:
app.get('/reports/:name', function(req, res, next){
var filepath = req.params.name;
var ffilepath = filepath.substr(0,12);
var filename = req.params.name;
var ffilename = filename.substr(-18);
console.log(ffilepath);
res.send('filename: ' ffilename);
//res.download(filename, edifilepath); // also check this line
});
Комментарии:
1. Использование жестко закодированных констант, таких как
12
и-18
, для динамического строкового значения, указанного пользователем, которое может быть любым, вряд ли даст предсказуемо правильный результат.2. Я согласен, но, возможно, он всегда знает длину параметра, который он собирается отправить
3. Я просто пытаюсь помочь с проблемой «‘substr’ of undefined»
4. Кроме того, вы не можете вызывать оба
res.send()
иres.download()
по одному и тому же запросу. Вы можете отправить только ОДИН ответ. Не удается отправить несколько ответов на один и тот же запрос.5. Я бы посоветовал вам изменить свой ответ на тот, в котором рассказывается только о том, как указать параметр в URL-адресе и как использовать
req.param
с этим параметром, а остальной код исключить из ответа.