CA
quickest-silver

sending a json response and saving it

in my code i want to send a json response to a file and save it how do i install the dependencies needed (mongoose, next, etc.) and without any errors when sending the json and use the fetchAPI or whatever method that can work w/ apify, and save the data do a mongodb database heres the code:
4 Replies
quickest-silver
quickest-silverOP2y ago
// Read the existing data from the rawData.json file
let rawData: any = {};
try {
const rawDataStr = fs.readFileSync('rawData.json', 'utf8');
rawData = JSON.parse(rawDataStr);
} catch (error) {
console.log('Error reading rawData.json:', error);
}

// Append the new data to the existing data
if (rawData.productList) {
rawData.productList.push(productData);
} else {
rawData.productList = [productData];
}

// Write the updated data back to the rawData.json file
fs.writeFileSync('rawData.json', JSON.stringify(rawData, null, 2));


const response = await fetch('/db', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ rawData }), // Send the search query in the request body

});

if (!response.ok) {
throw new Error('Query failed');
}

// Read the existing data from the rawData.json file
let rawData: any = {};
try {
const rawDataStr = fs.readFileSync('rawData.json', 'utf8');
rawData = JSON.parse(rawDataStr);
} catch (error) {
console.log('Error reading rawData.json:', error);
}

// Append the new data to the existing data
if (rawData.productList) {
rawData.productList.push(productData);
} else {
rawData.productList = [productData];
}

// Write the updated data back to the rawData.json file
fs.writeFileSync('rawData.json', JSON.stringify(rawData, null, 2));


const response = await fetch('/db', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ rawData }), // Send the search query in the request body

});

if (!response.ok) {
throw new Error('Query failed');
}

import mongoose from 'mongoose';
//import { NextApiRequest, NextApiResponse } from 'next';

const dbURI = 'mongodb+srv://harishs:[email protected]/'//'mongodb+srv://harishs:[email protected]/?retryWrites=true&w=majority';


const Schema = mongoose.Schema;

const productSchema = new Schema({
storeName: {
type: String,
required: true,
},
image: String,
title: String,
url: String,
description: String,
salePrice: String,
originalPrice: String,
reviewScore: String,
shippingInfo: String,
reviewNumber: Number,
ECOscore: Number,
}, { timestamps: true });

productSchema.index({
title: 'text',
description: 'text'
});

const Product = mongoose.models.Product || mongoose.model('Product', productSchema);


const connection: { isConnected?: number } = {};

async function dbConnect() {
if (connection.isConnected) {
return;
}

try {
mongoose.connect(dbURI)
.then(() => console.log('Connected to DB and listening on port 5500'))
.catch((err) => console.log(err));
} catch (error) {
console.error('Error connecting to MongoDB:', error);
}
}

export default async function handler (req, res) {
if (req.method !== 'POST') {
return res.status(405).json({ message: 'Method Not Allowed' });
}

const { products } = req.body;

try {
// Establish a connection to the MongoDB database
await dbConnect();
const rawProducts = await Product.insertMany(products);


} catch (error) {
console.error('Error querying products:', error);
return res.status(500).json({ error: 'Internal Server Error' });
}
}
import mongoose from 'mongoose';
//import { NextApiRequest, NextApiResponse } from 'next';

const dbURI = 'mongodb+srv://harishs:[email protected]/'//'mongodb+srv://harishs:[email protected]/?retryWrites=true&w=majority';


const Schema = mongoose.Schema;

const productSchema = new Schema({
storeName: {
type: String,
required: true,
},
image: String,
title: String,
url: String,
description: String,
salePrice: String,
originalPrice: String,
reviewScore: String,
shippingInfo: String,
reviewNumber: Number,
ECOscore: Number,
}, { timestamps: true });

productSchema.index({
title: 'text',
description: 'text'
});

const Product = mongoose.models.Product || mongoose.model('Product', productSchema);


const connection: { isConnected?: number } = {};

async function dbConnect() {
if (connection.isConnected) {
return;
}

try {
mongoose.connect(dbURI)
.then(() => console.log('Connected to DB and listening on port 5500'))
.catch((err) => console.log(err));
} catch (error) {
console.error('Error connecting to MongoDB:', error);
}
}

export default async function handler (req, res) {
if (req.method !== 'POST') {
return res.status(405).json({ message: 'Method Not Allowed' });
}

const { products } = req.body;

try {
// Establish a connection to the MongoDB database
await dbConnect();
const rawProducts = await Product.insertMany(products);


} catch (error) {
console.error('Error querying products:', error);
return res.status(500).json({ error: 'Internal Server Error' });
}
}
AND how can i format my data to send a json response
2023-08-06T05:04:53.344Z ERR! code EJSONPARSE
2023-08-06T05:04:53.346Z npm ERR! path /home/myuser/package.json
2023-08-06T05:04:53.349Z
2023-08-06T05:04:53.351Z npm ERR!
2023-08-06T05:04:53.353Z JSON.parse Unexpected token "}" (0x7D) in JSON at position 346 while parsing near "...\": \"^7.4.2\",\n\n\n\n },\n \"devDependenc..."
2023-08-06T05:04:53.355Z
2023-08-06T05:04:53.357Z npm ERR! JSON.parse Failed to parse JSON data.
2023-08-06T05:04:53.359Z npm ERR! JSON.parse Note: package.json must be actual JSON, not just JavaScript.
2023-08-06T05:04:53.361Z
2023-08-06T05:04:53.364Z
2023-08-06T05:04:53.366Z
2023-08-06T05:04:53.368Z npm ERR! A complete log of this run can be found in:
2023-08-06T05:04:53.370Z npm ERR! /home/myuser/.npm/_logs/2023-08-06T05_04_53_138Z-debug-0.log
2023-08-06T05:04:53.373Z
2023-08-06T05:04:54.448Z Removing intermediate container 21434274a5c4
2023-08-06T05:04:53.344Z ERR! code EJSONPARSE
2023-08-06T05:04:53.346Z npm ERR! path /home/myuser/package.json
2023-08-06T05:04:53.349Z
2023-08-06T05:04:53.351Z npm ERR!
2023-08-06T05:04:53.353Z JSON.parse Unexpected token "}" (0x7D) in JSON at position 346 while parsing near "...\": \"^7.4.2\",\n\n\n\n },\n \"devDependenc..."
2023-08-06T05:04:53.355Z
2023-08-06T05:04:53.357Z npm ERR! JSON.parse Failed to parse JSON data.
2023-08-06T05:04:53.359Z npm ERR! JSON.parse Note: package.json must be actual JSON, not just JavaScript.
2023-08-06T05:04:53.361Z
2023-08-06T05:04:53.364Z
2023-08-06T05:04:53.366Z
2023-08-06T05:04:53.368Z npm ERR! A complete log of this run can be found in:
2023-08-06T05:04:53.370Z npm ERR! /home/myuser/.npm/_logs/2023-08-06T05_04_53_138Z-debug-0.log
2023-08-06T05:04:53.373Z
2023-08-06T05:04:54.448Z Removing intermediate container 21434274a5c4
Alexey Udovydchenko
Its out of SDK functionality, use whatever recommended for reading files or interact with db for nodeJs apps. However your error above related to wrong format of package.json and its npm error, not in your code. As a quick solution please consider to use apify create - it will generate correct dependencies by template
quickest-silver
quickest-silverOP2y ago
so where do i run
apify create-
apify create-
or similar commands in the console to install dependencies

Did you find this page helpful?