我有由一組數據組成的現有 products.json 數據,我想在 post 請求上推送一個新的 json 對象。雖然 json 對像數組得到更新,但是當我打開 product.json 文件時,我沒有在該文件中看到新添加的數據。我收到這樣的錯誤
[Error: ENOENT: no such file or directory, open '../data/products.json'] {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '../data/products.json'
}
文件夾結構
controllers
productController.js
models
productModels.js
data
products.js
node_modules
package.json
package-lock.json
server.js
產品控制器文件
export const createProduct = async (req, res) => {
try{
const product = {
userId: 'req.userId',
id: 'req.id',
title: 'req.title',
body: 'req.body'
}
const newProduct = await create(product)
res.writeHead(201, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(newProduct))
}catch(err){
console.log(err)
}
}
產品型號文件
export const create = (product) => {
const id = uuid()
const newProduct = {...product, id}
products.push(newProduct)
writeDataToFile('../data/products.json', products)
const promise = new Promise((resolve, reject) => {
const newProduct = products.find(element => element.id = id)
setTimeout(() => {
resolve(newProduct)
}, 1000)
})
return promise
}
utils.js 文件
import { writeFile } from 'fs/promises';
export const writeDataToFile = async (filename, content) => {
try {
console.log(filename)
console.log(process.cwd())
await writeFile(filename, JSON.stringify(content));
} catch (err) {
console.error(err);
}
}
似乎路徑不正確,這就是它不更新文件的原因。
import { writeFile } from 'fs/promises';
import * as path from 'path';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
export const writeDataToFile = async (filename, content) => {
try {
console.log(filename)
console.log(process.cwd());
console.log(path.join(__dirname, filename)) // check if the path is correct
await writeFile(path.join(__dirname, filename), JSON.stringify(content));
return 'File Updated';
} catch (err) {
console.error(err);
}
}
您可能需要等待文件操作執行:
export const create = (product) => {
const id = uuid()
const newProduct = {...product, id}
products.push(newProduct)
await writeDataToFile('../data/products.json', products)
const promise = new Promise((resolve, reject) => {
const newProduct = products.find(element => element.id = id)
setTimeout(() => {
resolve(newProduct)
}, 1000)
})
return promise
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句