2017-07-08 282 views
0

我需要使用express与next.js吗?如何在Next.js中使用node.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"); 

回答

0

这可能咬你的事情是,大部分代码必须在客户端和服务器上运行。

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> 
    } 
} 

:如果是这样,你知道的代码运行服务器端,你可以打的文件系统 - 您可以通过创建一个getInitialProps()方法和检查,看看它是否通过了一个opts.req编写服务器唯一代码现在还不是一个完整的例子,你应该真的使异步(或返回一个承诺),然后在getInitialProps等待它,并最终返回代表解析&保存结果的道具。另外,处理fs.writeFile错误。但是,希望这足以让你朝着正确的方向前进。

请参阅the docs了解更多信息。

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

0

你可以要求它有条件通过测试,如果它是服务器:

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

和DOT不会忘了告诉的WebPack改变的package.json像这样做不是模块发送到客户端:

"browser": { 
    "fs": false 
    } 

除非它能产生错误。