0

I am trying to serve the following http_server.js files on my virtual machine that I have set it up on digitalocean.

Why am I getting this error message?

this is my http_server.js file:

// Import required modules
import express from 'express';
import lowdb from "lowdb";
import adapters from "lowdb/adapters";
import { FileSync } from "lowdb/adapters";
import cors from 'cors';
import { faker } from '@faker-js/faker';

 const app = express();
 const adapter = new FileSync('db.json');
 const db = low(adapter);

// allow cross-origin resource sharing (CORS)
app.use(cors());

// data parser - used to parse post data
app.use(express.urlencoded({ extended: false }));
app.use(express.json());

// serve static files from public directory
app.use(express.static('public'));

// init the data store
db.defaults({ users: [] }).write();

// return all users
app.get('/data', function(req, res) {
  res.send(db.get('users').value());
});

// add user
app.post('/add', function(req, res) {
  var user = {
    name: req.body.name,
    dob: req.body.dob,
    email: req.body.email,
    username: req.body.username,
    password: req.body.password,
    phone: req.body.phone,
    streetaddress: req.body.streetaddress,
    citystatezip: req.body.citystatezip,
    latitude: req.body.latitude,
    longitude: req.body.longitude,
    avatar: faker.internet.avatar()
  };
  db.get('users').push(user).write();
  console.log(db.get('users').value());
  res.send(db.get('users').value());
});

// start server
app.listen(3001, function() {
  console.log('Running on port 3001!');
});

I think I have properly installed all the dependencies needed. I can see the following dependencies listed in my package.json file already:

{
  "name": "sample",
  "version": "1.0.0",
  "description": "vm app",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "saro",
  "license": "MIT",
  "dependencies": {
    "cors": "^2.8.5",
    "express": "^4.18.2",
    "FileSync": "^1.0.1",
    "lowdb": "^6.0.1",
    "lowdb-adapter": "^0.1.3",
    "node-fetch": "^2.6.1"
  }
}
Lin Du
  • 88,126
  • 95
  • 281
  • 483
Sar
  • 1
  • 1
    Can you show the full error stack? – Lin Du Jul 25 '23 at 03:05
  • node:internal/errors:484 ErrorCaptureStackTrace(err); ^ Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './adapters' is not defined by "exports" in /root/sample/node_modules/lowdb/package.json imported from /root/sample/http_server.js at new NodeError (node:internal/errors:393:5) at throwExportsNotFound (node:internal/modules/esm/resolve:358:9) at packageExportsResolve (node:internal/modules/esm/resolve:668:3) at packageResolve (node:internal/modules/esm/resolve:843:14) at moduleResolve (node:internal/modules/esm/resolve:909:20) – Sar Jul 25 '23 at 17:40
  • at defaultResolve (node:internal/modules/esm/resolve:1124:11) at nextResolve (node:internal/modules/esm/loader:163:28) at ESMLoader.resolve (node:internal/modules/esm/loader:841:30) at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18) at ModuleWrap. (node:internal/modules/esm/module_job:76:40) { code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' } – Sar Jul 25 '23 at 17:40

1 Answers1

1

Since version 2.0, the API and modules of the adapter have breaking changes. See Adapters documentation of v6.0.1:

import { JSONFile, JSONFileSync } from 'lowdb/node'

new Low(new JSONFile(filename), {})
new LowSync(new JSONFileSync(filename), {})

And the migration guide from v1 to v2.

E.g.

index.js:

import { Low } from "lowdb";
import { JSONFile } from "lowdb/node";

const adapter = new JSONFile("db.json");
const defaultData = { posts: [] };
const db = new Low(adapter, defaultData);

await db.read();
console.log(db.data);

db.json:

{
  "posts": ["hello world"]
}

Execution result:

$ node index.js 
{ posts: [ 'hello world' ] }

package.json:

{
  "type": "module",
  "dependencies": {
    "lowdb": "^6.0.1"
  }
}

Node: v18.16.1

Lin Du
  • 88,126
  • 95
  • 281
  • 483