如果getServerSideProps在服务器上运行,我可以调用node,js函数来访问服务器资源?

b0zn9rqh  于 2023-04-29  发布在  Node.js
关注(0)|答案(1)|浏览(101)

我想从服务器读取并返回一个文件列表,并在下一个js页面(in /pages)上使用getServerSideProps传递给我的组件
如果getServerSideProps在服务器上运行,那么我可以(以某种方式)调用node。js函数来访问服务器资源?这对于制作反映服务器上文件结构的动态菜单系统非常有用。
我的第一次尝试失败了,因为Next js无法识别节点。js common js imports.是否有正确的方法来访问节点的全部集合。js资源和功能从一个组件?
/pages/home.土耳其电信公司

// requiring path and fs modules
const path = require('path');
const fs = require('fs');

// these also failed - next js cant find them
// import * as path from 'path'
// import * as fs from 'fs';

function readFiles() {
    // joining path of directory 
    const directoryPath = path.join(__dirname, 'Documents');
    // passing directoryPath and callback function
    fs.readdir(directoryPath, function (err, files) {
        //handling error
        if (err) {
            return console.log('Unable to scan directory: ' + err);
        } 
        //listing all files using forEach
        files.forEach(function (file) {
            // Do whatever you want to do with the file
            console.log(file); 
        });
    });
    return files;
}

export async function getServerSideProps(context) {
    return {
      props: {
          readFiles();
      }, // will be passed to the page component as props
    }
  }

服务器错误:

|next-next12  | https://nextjs.org/docs/messages/module-not-found
0|next-next12  | wait  - compiling...
0|next-next12  | error - ./pages/home.tsx:4:11
0|next-next12  | Module not found: Can't resolve 'fs'
0|next-next12  |   2 | //requiring path and fs modules
0|next-next12  |   3 | const path = require('path');
0|next-next12  | > 4 | const fs = require('fs');

这可能吗?如果不是,我们仅限于获取getServerSideProps中的数据。访问服务器也会很棒。

bq3bfh9z

bq3bfh9z1#

getServerSideProps里面你可以写node。js代码,就像你在服务器上写的一样。
您也可以按照ES模块约定导入服务器包:

import path from 'path';
import fs from 'fs';

但只能在getServerSideProps内部使用
所以你的代码应该看起来像这样:

import path from 'path';
import fs from 'fs';

export async function getServerSideProps(context) {
  function readFiles() {
    // joining path of directory 
    const directoryPath = path.join(__dirname, 'Documents');
    // passing directoryPath and callback function
    fs.readdir(directoryPath, function (err, files) {
      //handling error
      if (err) {
        return console.log('Unable to scan directory: ' + err);
      } 
      //listing all files using forEach
      files.forEach(function (file) {
        // Do whatever you want to do with the file
        console.log(file); 
      });
    });
    return files;
  }
  return {
    props: {
      readFiles();
    }, // will be passed to the page component as props
  }
}

相关问题