2017-07-08 284 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 
    } 

除非它能產生錯誤。