我需要在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");发布于 2017-08-19 20:02:30
您可以通过测试它是否是服务器来有条件地要求它:
static async getInitialProps({isServer}){
var fs;
if(isServer){
fs=require('fs');
//and do what ever you want
}
}别忘了告诉webpack不要把模块发送给客户端,把package.json改成这样:
"browser": {
"fs": false
}除非它会产生错误。
发布于 2017-07-13 23:55:17
最让您头疼的是,您的大部分代码必须同时在客户端和服务器上运行。您可以通过创建一个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()异步(或者返回一个承诺),然后在getInitialProps中等待它,最后返回代表解析和保存结果的道具。另外,处理fs.writeFile错误。但是,希望这足以让你朝着正确的方向前进。
有关这方面的更多信息,请参阅the docs。
或者你可以像你建议的那样使用Express。如果你决定走这条路,有一个good tutorial和example code可以帮助你开始。
https://stackoverflow.com/questions/44983810
复制相似问题