如何将node.js模块与Next.js一起使用?

时间:2017-07-08 07:43:03

标签: npm next.js

我是否需要使用express with next.js?

我试图将此代码添加到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");

2 个答案:

答案 0 :(得分:0)

可能咬你的是大多数代码必须同时在客户端和服务器上运行。您可以通过创建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中等待它,并最终返回代表结果的道具解析&amp;保存。此外,处理fs.writeFile错误。但是,希望它足以让你朝着正确的方向前进。

有关详细信息,请参阅the docs

或者你可以像你建议的那样使用Express。有一个good tutorialexample code可以帮助您开始,如果您决定走这条路。

答案 1 :(得分:0)

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

###CURRENT_PID###

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

keydown

除非它可以产生错误。