Uploading files error with express-fileUpload - node.js

I have an error uploading a file on the server if I can help
This is a command to get the file from the client and save it to the uploads folder
exports.adminSendFile = (req, res) => {
if (req.files === null) {
return res.status(400).json({ msg: 'No file uploaded' });
}
const file = req.files.file;
file.mv(`${__dirname}/SERVER/Servises/uploads/${file.name}`, err => {
console.log("****HERE*****");
if (err) {
console.error(err);
return res.status(500).send(err)
}
res.json({
fileName: file.name,
filePath: `/SERVER/Servises/uploads/${file.name}`
})
console.log(req.body),
vacations.create({
description: req.body.description,
destination: req.body.destination,
createdAt: req.body.createdAt,
updatedAt: req.body.updatedAt,
img: req.body.filePath,
price: req.body.price,
})
})
Imge>>>Clike-Me
You can see the Error here
{ [Error: ENOENT: no such file or directory, open 'C:\Users\Itzik\Desktop\לימודים\projact3\server\Servises\controller\SERVER\Servises\uploads\My Passport Photo.jpg']
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path:
'C:\\Users\\Itzik\\Desktop\\לימודים\\projact3\\server\\Servises\\controller\\SERVER\\Servises\\uploads\\My Passport Photo.jpg' }
POST /users/admin/upload 500 40.394 ms - 189

__dirname is the most common method. It gives you the path of the currently running file.
As per your error , I think what path you are trying to get is this :
C:\Users\Itzik\Desktop\לימודים\projact3\server\Servises\uploads\My Passport Photo.jpg'
And not :
C:\Users\Itzik\Desktop\לימודים\projact3\server\Servises\controller\SERVER\Servises\uploads\My Passport Photo.jpg'
You need to go one step up from current directory with ../ and then you are good to go, like this :
file.mv(`${__dirname}/../uploads/${file.name}`

Related

Reading a JSON file with fsPromises returns node:internal/process/promises:279 error

so I was making a program that scrapes a website and stores the data in json format with fsPromises.writeFile and another program that reads the json file with fsPromises.readFile. the json file is written correctly as I've checked it manually but when I try to read it with fsPromises it returns the error mentioned below.
I've checked the file path and it's all correct, and I can literally see the json file in the directory and when I use require to parse the JSON file it works, but I want to use fs to check is the file is present and to parse from the file
I wrote the JSON file with fsPromises like this
await fsPromises.writeFile(
path.join(__dirname, "json", "productVarables.json"),
JSON.stringify(variables),
(err) => {
if (err) {
console.log("error while writing the JSON" + err);
} else {
console.log("successfuly written the JSON file");
}
}
);
and when I try to read it using fsPromises like this
await fsPromises.readFile(
path.join(__dirname, "json", "productVarables.json"),
"utf-8",
(err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
}
);
I get the following error
node:internal/process/promises:279
triggerUncaughtException(err, true /* fromPromise */);
^
[Error: ENOENT: no such file or directory, open 'D:\desktop\Project\Node\Scraper\json\productVariables.json'] {
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'D:\\desktop\\Project\\Node\\Scraper\\json\\productVariables.json'
}

Node JS fs.unlink not working Static folder

I have static folder, this:
App.use('/getUnity', Express.static(__dirname + '/uax_vr_uploads/unityFiles'));
I want delete file in folder, not working this 2 fs.unlink:
fs.unlink('http://localhost:3002/getUnity/' + response[0][item].varyant_object, (error) => {
if (error) {
console.log(error);
} else {
console.log('Deleted');
}
});
OR
fs.unlink('http://localhost:3002/uax_vr_uploads/unityFiles/' + response[0][item].varyant_object, (error) => {
if (error) {
console.log(error);
} else {
console.log('Deleted');
}
});
Console LOG:
[Error: ENOENT: no such file or directory, unlink 'http://localhost:3002/getUnity/file-1590880543263.unity3d'] {
errno: -2,
code: 'ENOENT',
syscall: 'unlink',
path: 'http://localhost:3002/getUnity/file-1590880543263.unity3d'
}
If you're trying to remove a file from your static folder, then you need to pass a valid OS path name to fs.unlink() not a URL that only your server would know about.
If the file on your disk that you're actually trying to remove is this:
/uax_vr_uploads/unityFiles/file-1590880543263.unity3d
Then, judging by your code, it looks like you want this:
fs.unlink('/uax_vr_uploads/unityFiles/' + response[0][item].varyant_object);

fs.writeFile not saving even when path is correct

Having an issue with fs.writeFile in my nodejs app running locally where im getting an error of this below,
I am running on localhost xampp also on windows if that may be an issue?
[Error: ENOENT: no such file or directory, open 'C:\Users\exampleuser\Desktop\examplenodejspath\product\sku123.json'] {
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'C:\\Users\\exampleuser\\Desktop\\examplenodejspath\\product\\sku123.json'
}
Below is a copy of the code.
var product = {"SKU": "sku123","name": "test"};
fs.writeFile(__dirname + "/product/" + product.SKU + ".json", product, 'utf8', function (err) {
if (err) {
return console.log(err);
}
console.log("product was saved!");
});
I can confirm the path is correct. but for some reason it still returns its not correct.
Any help would be appericated

Cannot write on json file in express app nodejs

I'm trying to read and write some data in express application (in a json file which already exists and has some data) using FS nodejs module but it returns this error in console:
Object { errno: -13, code: "EACCES", syscall: "open", path: "data.json" }
It works in localhost, but not on my web server and I don't understand where is the problem.
I've tried several ways to write on file and I'm sure this one works perfectly.
SERVER SIDE CODE:
app.post('/addLocation', function(req, res){
var jsonFile = JSON.parse(fileSystem.readFileSync(path.join(__dirname,'data.json'),'utf8'));
jsonFile.locations.push(req.body); //json data is an array named 'locations'
fileSystem.writeFile('data.json', JSON.stringify(jsonFile, null, 2), function(err){
if (err) res.send(err);
else res.send('SERVER MESSAGE: data saved');
});
})
CLIENT SIDE CODE:
const data = {name, address, lat, lng, content, audience, detail, language, purpose, description};
$.ajax({
url: '/addLocation',
type: "POST",
data: data,
success: function(result){
console.log(result);
}
});
ERROR in console:
Object { errno: -13, code: "EACCES", syscall: "open", path: "data.json" }

Error downloading file from my Node.js server

I'm trying to make a download link on my server for a zip file and I'm currently getting this error: (Note, still just testing it on local machine)
{ [Error: ENOENT: no such file or directory, stat 'C:\Users\Jordan\Desktop\Websites\HappyCamel\Users\Jordan\Desktop\Websites\HappyCamel']
errno: -4058,
code: 'ENOENT',
syscall: 'stat',
path: 'C:\\Users\\Jordan\\Desktop\\Websites\\HappyCamel\\Users\\Jordan\\Desktop\\Websites\\HappyCamel',
expose: false,
statusCode: 404,
status: 404 }
The relevant code is this:
router.get('/file/:name', function(req, res, next) {
console.log('test123'); //successfully prints to console
res.download('Users/Jordan/Desktop/Websites/HappyCamel/', 'test123.zip', function(err) {
console.log('test456'); //successfully prints to console
if(err) {
console.log(err) //I'm assuming this is source of logged error
} else {
console.log("no error"); //doesn't print
}
});
})
edit:
Fixed it with changing this line:
res.download('Users/Jordan/Desktop/Websites/HappyCamel/', 'test123.zip', function(err) {
to
res.download('./test123.zip', 'test123.zip', function(err) {
but now I get
angular.min.js:114 ReferenceError: success is not defined
error on my browser, but no errors in my node console (my "no error" line is printing)
you are using relative path. when you do this:
res.download('Users/Jordan/Desktop/Websites/HappyCamel/', 'test123.zip', function(err) {
it will look for Users/Jordan/Desktop/Websites/HappyCamel/ inside your current file's directory. looks like what you need is full path, or better a correct relative path- from the error it looks like the file is located with your code, so this should do:
res.download('./', 'test123.zip', function(err) {

Resources