#javascript #import #module
Вопрос:
Я использую require для импорта 3 файлов с почти одинаковым кодом, но один из них (writeToSource.js) не работает. Я думал, что даю неправильные аргументы функции, но когда я проверил, все правильно. Что я могу сделать? Я получаю эту ошибку:
TypeError: writeSource is not a function
at Request._callback (/home/nika/Desktop/Girchi/Media-Girchi/assets/components/scrapOn.js:35:11)
Основной файл JavaScript:
const request = require('request');
const cheerio = require('cheerio');
const writeDataToGirchi = require('./writeDataToGirchi');
const writeDataToImportants = require('./writeDataToImportants');
const writeToSource = require('./writeToSource');
function scrapOn(url, accept, accept1, sourceImgUrl) {
try {
request(url, (error, response, html) => {
if (!error amp;amp; response.statusCode == 200) {
const $ = cheerio.load(html);
const title = $('.article-title').text();
const dataInfo = $('.date').first().text();
const text = $('.article-body').text();
const imgUrl = `https:${$('.global-figure-image ').attr("src")}`;
const writeGirchi = writeDataToGirchi("on.json", title, dataInfo, text, imgUrl, sourceImgUrl, url);
const writeImportants = writeDataToImportants("on.json", title, dataInfo, text, imgUrl, sourceImgUrl, url);
const writeSource = writeToSource("on.json", "On", title, dataInfo, text, imgUrl, sourceImgUrl, url);
if (accept === "on" amp;amp; accept1 === "on") {
writeGirchi();
writeImportants();
writeSource();
} else if (accept === "on") {
writeImportants();
writeSource();
} else if (accept1 === "on") {
writeGirchi();
writeSource();
} else {
writeSource();
}
}
});
} catch (err) {
console.log(err);
}
}
writeToSource.js файл:
const fs = require('fs');
function writeToSource(fileName, name, title, dataInfo, text, imgUrl, sourceImgUrl, url) {
fs.readFile(`./assets/data/${fileName}`, (err, data) => {
if (err) throw err;
let newsData = JSON.parse(data);
newsData[dataInfo] = {
...newsData[dataInfo],
source: name,
title: title,
text: text,
link: url,
logo: sourceImgUrl,
articleDate: dataInfo,
imgUrl: imgUrl,
important: false,
fileName: fileName
};
newsData = JSON.stringify(newsData)
fs.writeFileSync(`./assets/data/${fileName}`, newsData, (error) => {
if (error) console.log(error)
})
});
}
module.exports = writeToSource;
Заранее благодарю вас!
Ответ №1:
Я думаю, это потому, что вы не экспортировали функцию или что-то в своем WriteToSouce.js файл
export function WriteToSource(...args){
//do your stuff
}
ИЛИ вы могли бы использовать
module.exports=WriteToSource;
Как говорится в документации для require
Основная функциональность require заключается в том, что он считывает файл JavaScript, выполняет файл, а затем переходит к возврату экспорта
В вашем случае вы никогда не экспортировали функцию, но называли ее последней как функцию в основном файле js, что означает const writeToSource = require('./writeToSource');
, что она ничего не возвращает, а writeToSource не определен
Комментарии:
1. Спасибо за ответ! Я экспортировал его в свой файл, но забыл написать здесь. Прости!
Ответ №2:
writeSource действительно не является функцией, это возвращаемое значение writeToSource(…args). Если вы хотите, чтобы это была функция, попробуйте это
const writeSource = () => {
writeToSource("on.json", "On", title, dataInfo, text, imgUrl, sourceImgUrl, url);}
Комментарии:
1. Теперь понял. Спасибо!
Ответ №3:
Я чувствую себя сейчас очень глупо. Я просто const writeSource = writeToSource()
заменил функцию стрелкой — const writeSource = () => { writeToSource() }
и это работает.
Ответ №4:
Вы не экспортировали функцию writeToSource, чтобы она была доступна в main.js
module.exports = Источник записи;
Создал кодовое поле просто для того, чтобы уточнить, как вы будете его экспортировать https://codesandbox.io/s/currying-browser-5lzqy?file=/src/index.js
Издевался над вашими файлами и вызывал writeToSource из главного(index.js) работы
Комментарии:
1. Спасибо за ответ! Я экспортировал его в свой файл, но забыл написать здесь. Прости!