【问题标题】:How Do I use a node.js module with Next.js?如何在 Next.js 中使用 node.js 模块?
【发布时间】:2017-12-12 12:30:39
【问题描述】:

我需要在 next.js 中使用 express 吗?

我正在尝试将此代码添加到 next.js 应用程序中。 (来自 npm 模块示例代码:pdf2json)

let fs = require('fs');
var PDFParser = require("pdf2json");
let pdfParser = new PDFParser(this,1);

pdfParser.on("pdfParser_dataError", errData => 
   console.error(errData.parserError) );
pdfParser.on("pdfParser_dataReady", pdfData => {
fs.writeFile("./sometxt.txt", pdfParser.getRawTextContent());
pdfParser.loadPDF("./page1.pdf");

【问题讨论】:

    标签: npm next.js


    【解决方案1】:

    您可以通过测试它是否是服务器来有条件地要求它:

    static async getInitialProps({isServer}){
     var fs;
     if(isServer){
      fs=require('fs');
      //and do what ever you want
     }
    }
    

    并且不要忘记通过像这样更改 package.json 来告诉 webpack 不要将模块发送到客户端:

      "browser": {
        "fs": false
      }
    

    除非它会产生错误。

    【讨论】:

    • 我可以添加多个参数来获取初始道具吗?
    【解决方案2】:

    可能让您感到困扰的是,您的大部分代码必须同时在客户端和服务器上运行。您可以通过创建 getInitialProps() 方法并检查它是否在 opts.req 中传递来编写仅服务器代码 - 如果是,您知道代码正在服务器端运行,您可以访问文件系统:

    import React from 'react'
    
    const doServerSideStuff = () => {
        let fs = require('fs');
        var PDFParser = require("pdf2json");
        let pdfParser = new PDFParser(this,1);
    
        pdfParser.on("pdfParser_dataError", errData => 
           console.error(errData.parserError) );
        pdfParser.on("pdfParser_dataReady", pdfData => {
        fs.writeFile("./sometxt.txt", pdfParser.getRawTextContent());
        pdfParser.loadPDF("./page1.pdf");
    }
    
    export default class extends React.Component {
      static async getInitialProps ({ req }) {
        if (req) {
          doServerSideStuff();
        }
        return {};
      }
      render () {
        return <div> Hello World </div>
      }
    }
    

    这还不是一个完整的例子,你真的应该让doServerSideStuff()异步(或返回一个promise)然后在getInitialProps中等待它,并最终返回代表解析和保存结果的道具。另外,处理fs.writeFile 错误。但是,希望这足以让您朝着正确的方向前进。

    有关更多信息,请参阅the docs

    或者您可以按照您的建议使用 Express。如果您决定走那条路,有一个good tutorialexample code 应该可以帮助您入门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-15
      • 2021-06-26
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多