我是否需要使用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");
答案 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 tutorial和example code可以帮助您开始,如果您决定走这条路。
答案 1 :(得分:0)
您可以通过测试它是否是服务器来有条件地要求它:
###CURRENT_PID###
并且不要忘记告诉webpack不要通过更改package.json将模块发送到客户端:
keydown
除非它可以产生错误。