У меня есть базовая настройка веб-приложения с файловой структурой, похожей на эту:
WEB APP
- data
-year.txt
- cron
-write.js
Один родительский каталог с двумя папками, каждая из которых содержит один файл. Файл write.js генерирует кучу данных на серверной части, JSON.string формирует эти данные и записывает строку в файл year.txt, расположенный в другой папке. Вот как это выглядит в файле write.js:
try {
fs.writeFile(__dirname + '/../data/year.txt', JSON.stringify(organizedData), () => {
console.log('SUCCESS');
res.status(200);
res.send(null);
});
} catch (e) {
res.status(500);
console.log(e);
res.send(null);
}
Все это отлично работает на моем ЛОКАЛЬНОМ сервере, файл write.js обновляет year.txt правильными данными. Я просто пытаюсь понять, почему это не работает на моем рабочем сервере, размещенном в Google Cloud App Engine. Что меня действительно смущает, так это то, что когда я проверяю журналы на этом рабочем сервере, я получаю сообщение «УСПЕХ», что означает, что функция fs.writeFile не выдает никаких ошибок. Я проверяю URL-адрес файла year.txt, и ничего не добавляется. Я не могу понять это, возможно, это как-то связано с путем к файлу в функции writeFile?
2 ответа
fs.writeFile()
передает свои ошибки обратному вызову в качестве первого аргумента err
(на который вы не обращаете никакого внимания). Итак, первое, что вам нужно сделать, это зарегистрировать реальную ошибку fs.writeFile()
. Но я бы «догадался», что это ошибка прав доступа к файлу для каталога, в который вы пытаетесь записать в конфигурации вашего хостинга.
fs.writeFile()
не сообщает об ошибках, вызывая исключение. Итак, вам нужно отловить такие ошибки:
fs.writeFile(__dirname + '/../data/year.txt', JSON.stringify(organizedData), (err) => {
if (err) {
console.log(err);
res.sendStatus(500);
} else {
console.log('SUCCESS');
res.sendStatus(200);
});
возможно, это как-то связано с путем к файлу в функции writeFile
Да, возможно. Но регистрация фактической ошибки даст вам больше информации. Вы также можете прочитать некоторый документ по конфигурации вашего хостинга, чтобы узнать, куда именно вам разрешено писать из вашего серверного процесса.
Вот ссылка из документации Google Cloud. при записи данных в файлы. Он предлагает вам либо писать во временный каталог, либо писать в облачное хранилище Google.
Это может быть связано с политикой чтения и записи файловой системы в вашей серверной среде, вам необходимо проверить, имеет ли ваше приложение node достаточно прав для записи файла в этот конкретный каталог.
Регистрация фактической ошибки даст вам и мне больше информации. Вам также необходимо прочитать некоторую документацию, чтобы узнать, куда именно вам разрешено писать из вашего серверного процесса.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.