node.jsqwik

How can I access file system inside Qwik Endpoints?


I'm trying to create an Endpoint in Qwik that needs to access file system. I intend to use Node.js fs for this purpose.

Here's what I wrote:

import fs from 'fs'

And I get this error:

(node:248) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/Project/SiteQwik/Run.js:1
import fs from 'fs'
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at internalCompileFunction (node:internal/vm:73:18)
    at wrapSafe (node:internal/modules/cjs/loader:1178:20)
    at Module._compile (node:internal/modules/cjs/loader:1220:27)
    at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
    at Module.load (node:internal/modules/cjs/loader:1119:32)
    at Module._load (node:internal/modules/cjs/loader:960:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:23:47

And if I change it to const fs = require('fs') I get this error:

require is not defined

So I'm stuck at this point. What should I do?


Solution

  • Here is a working example to create this endpoint http://xxx/api/config/

    file to read: 'data/config.json'

    {
      "version": "1"
    }
    

    endpoint: 'src/routes/api/config/index.tsx'

    import { type RequestHandler } from '@builder.io/qwik-city';
    import { readFileSync } from 'fs';
    
    export const onGet: RequestHandler = async ({ json }) => {
        const path = './data/config.json';
        const config = readFileSync(path, { encoding: 'utf-8' });
        json(200, JSON.parse(config));
    };
    

    btw for a simple json you can serve it with the public directory