简体   繁体   中英

json-server with express/ db.json is not reflecting changes

We are having a simple json-server setup, loading it as a module. However, when making a POST/PUT request, the data is not being injected into the db.json.

const jsonServer = require("json-server");
const source = require("./db.json");
const repl = require("replify");
const bodyParser = require("body-parser");
const paginationMiddleware = require("./middlewares/pagination");
const filterByAccessRightFor = require("./middlewares/filterByAccessRightFor");
const searchMiddleware = require("./middlewares/search");
const delayMiddleware = require("./middlewares/delay");
const createdAt = require("./middlewares/created_at");
const daterange = require("./middlewares/daterange");
const absence = require("./middlewares/absence");
const bankAccount = require("./middlewares/bankAccount");
const sort = require("./middlewares/sort");

const fileUpload = require("express-fileupload");

const withUser = require("./responseEnhancers/withUser");
const withAbsenceType = require("./responseEnhancers/withAbsenceType");
const withIndexData = require("./responseEnhancers/withIndexData");
const withNationalStateHolidayOverride = require("./responseEnhancers/withNationalStateHolidayOverride");
const withRoleRestrictions = require("./responseEnhancers/withRoleRestrictions");

const compose = require("lodash/fp/compose");
const initSickImagesEndpoint = require("./features/sicks/images/initEndpoint");
const initLoginEndpoint = require("./features/login/initEndpoint");
const path = require("path");
const express = require("express");

const createCalendarEntry = require("./_helpers/createCalendarEntry");

process.on("createCalendarEntry", createCalendarEntry);

const server = jsonServer.create();

const defaultMiddlewares = jsonServer.defaults({
  static: path.join(path.resolve(process.cwd()), "server", "files")
});

const router = jsonServer.router(source, {
  foreignKeySuffix: "_id"
});

router.render = (req, res) => {
  res = compose(
    withIndexData(req),
    withUser,
    withAbsenceType,
    withNationalStateHolidayOverride(req),
    withRoleRestrictions(req, db)
  )(res);

  res.jsonp(res.locals.data);
};

const db = router.db;

if (process.env.NODE_ENV === "production")
  server.use(express.static(path.join(__dirname, "../build")));

server
  .use(
    jsonServer.rewriter({
      "/de/*": "/$1"
    })
  )
  .use(bodyParser.json())
  .use(fileUpload())
  .use(defaultMiddlewares)
  .use(paginationMiddleware)
  .use(searchMiddleware)
  .use(delayMiddleware)
  .use(createdAt)
  .use(daterange)
  .use(absence)
  .use(bankAccount)
  .use(sort);

initLoginEndpoint(server, db);
initSickImagesEndpoint(server, db);

server.route("/sicks").all(filterByAccessRightFor(db));
server.route("/vacations").all(filterByAccessRightFor(db));

server.use(router);

server.listen(3001, "0.0.0.0", () => {
  console.log("JSON Server is running");
});

repl("db", server, { db });

exports.db = db;

module.exports = server;

This is our index.js and apart from the db.json not updating, everything is working fine as expected. We have a script that is seeding the db, and when accessing a resource via GET the correct data gets retrieved. Any ideas on that one?

Instead of providing a JSON object using require for the db.json file, you should provide a path to the json file.

// const source = require("./db.json");
const source = path.join(__dirname, 'db.json')
const router = jsonServer.router(source, {
    foreignKeySuffix: "_id"
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM