Tengo un script de nodo simple en el que actualizo el archivo db.json a través del formulario. Actualiza el archivo, pero cuando lo renderizo en respuesta a una obtención o publicación, solo da resultados anteriores.
var cors = require('cors') const express = require('express'); const app = express(); var jsonfile = require('jsonfile'); var file = './db.json' var filex = require('./db.json') app.engine('html', require('ejs').renderFile); app.use(cors()) const http = require('http'); const port = process.env.PORT || 3000 const bp = require('body-parser') app.use(bp.json()) app.use(bp.urlencoded({ extended: true })) app.set('view engine', 'html') // Defining get request at '/' route app.get('/', function(req, res) { res.send("<html><head><title>Json</title></head><body><form id='form1' action='/gettingdata' method='post'><input type='text' name='usrid' /><button type='submit' form='form1' value='Submit'>Submit</button></form></body></html>") }); app.post('/gettingdata',function(req,res){ var user_id = req.body.usrid; var obj = JSON.parse(user_id) jsonfile.writeFileSync(file, obj,{flag: 'w'}); res.send('updated'); }) app.post('/api',function(req,res){ res.send(filex) }) app.get('/api',function(req,res){ res.send(filex) }) //extra app.post('/api/v1/users/initial_authentication',function(req,res){ res.send(filex) }) app.get('/api/v1/users/initial_authentication',function(req,res){ res.send(filex) }) app.listen(port, function(req, res) { console.log("Server is running at port 3000"); });Solo da resultados actualizados sobre el redesarrollo del servidor.
var filex = require('./db.json') Entonces, filex solo carga el archivo cuando se inicia el servidor. Si intenta obtener el contenido más actualizado del archivo db.json , vuelva a cargar el archivo.
Supongo que res.send(require('./db.json')) puede funcionar como se esperaba.
Resolví este problema usando delete require.cache[require.resolve('./db.json')]