res.send()
из маршрута я прикрепил объект, который я бы отправил, к объекту res
и затем вызвал next()
в конце моего маршрута. Так, например, res.send({message:'blah'});
становится res.return = {message:'blah'}; next();
. Я использую .return
, потому что я не верю, что такое свойство существует в объекте res
по умолчанию, и я нахожу его достаточно описательным для моих целей. Затем в моем postRoute
промежуточном программном обеспечении я могу легко получить доступ к res.return
, после чего я вызываю return res.send(res.return)
.
Используя мой пример из вопроса (app.js
остается именно таким, каким вы его видите):
/* FILE: /routes/myRoute */
...
router.post('/myRoute', [], (req, res, next) => {
if(theConditionIsMet()) {
res.return = { message:'The condition was met.' };
} else {
res.return = { message:'The condition was not met.' };
}
next();
});
....
router.post('/anotherRoute', [], (req, res, next) => {
// In this route I don't need to intercept the response, so I just do it like normal.
return res.send({ message:'Feels good, man.' });
});
...
/* FILE: /middleware/postRoute */
const postRoute = function(req, res, next) {
if(res.hasOwnProperty('return') {
return res.send(res.return);
}
};
module.exports = { postRoute };
Один недостаток, который я уже вижу, состоит в том, что теперь мне придется реструктурируйте все мои маршруты, чтобы использовать этот метод res.send()
(или, по крайней мере, все маршруты, для которых я хочу перехватить возвращаемое значение). Из-за этого и из-за того, что я представляю, что кто-то более знающий, чем я, возможно, сможет найти лучший способ сделать это, я не собираюсь принимать свой собственный ответ.
Если вы имеете в виду VBA, то вы можете использовать FullName, например:
strFileFullName = ThisWorkbook.FullName
(обновлено, как указано в комментариях: ранее использовавшийся ActiveWorkbook.FullName
, скорее всего, ошибался, если другие офисные файлы) может быть открытым (ed) и активным. Но в случае, если вы сохранили макрос в другом файле, как указано пользователем @ user7296559 здесь , и действительно хотите имя файла файла, использующего макрос, ActiveWorkbook
может быть правильным выбором, если он гарантированно активен во время выполнения.)
Это простая альтернатива, которая дает все ответы, полное имя, путь, имя файла.
Dim FilePath, FileOnly, PathOnly As String
FilePath = ThisWorkbook.FullName
FileOnly = ThisWorkbook.Name
PathOnly = Left(FilePath, Len(FilePath) - Len(FileOnly))
strScriptFullname = WScript.ScriptFullName
strScriptPath = Left(strScriptFullname, InStrRev(strScriptFullname,"\"))
Если вам нужен только путь, это самый простой способ:
PathOnly = ThisWorkbook.Path
ActiveWorkbook.FullName было бы лучше, я думаю, если у вас есть макрос VBA, сохраненный в другой книге Excel, но вы хотите получить сведения о редактируемом Excel, а не о том, где находится макрос.
Если они находятся в одном и том же файле, то это не имеет значения, но если они находятся в разных файлах, и вам нужен файл, в котором находятся Данные, а не Макрос, то ActiveWorkbook - это тот, который пойти, потому что он имеет дело с обоими сценариями.
Существует универсальный способ получить это:
Function FileName() As String
FileName = Mid(Application.Caption, 1, InStrRev(Application.Caption, "-") - 2)
End Function