我在Nextjs中的一切都很挣扎。即使是基本的东西对我来说也不起作用。这个简单的例子是一个API调用,如果输入“Me”,它会返回logged in,并且应该返回从mydata.txt
读取的消息。文件读取会破坏它,如果msg
是硬编码的,它就能工作!
app/api/myapi.js
var fs = require('fs');
export default function handler(req, res) {
var msg = fs.readFileSync("mydata.txt")
if(req.body=="Me"){ res.status(200).json({ message: `Logged in` }) }
else{ res.status(200).json({ message: `Error ${msg}` }) }
}
字符串
在index.html
中,我尝试获取响应并警告它。mydata.txt
文件的行为"Not logged in"
(mydata.txt
位于app/api
目录中,我还尝试将其放在根目录中。)
错误总是:
POST https://basicapi.vercel.app/api/myapi 404(Not Found)VM 155:1 Uncaught(in promise)SyntaxError:JSON input的意外结尾
我试着把mydata.txt
文件移到不同的地方。当msg
被硬编码时,它就像预期的那样工作了。
1条答案
按热度按时间drkbr07n1#
你混淆了应用路由器(NextJS 13的新功能)和页面路由器。它们需要不同的样式,甚至NextJS文档也根据项目所基于的路由器类型将文档分开。
如果您使用的是页面路由器:
page
/pages/api/myapi.js
如果您使用的是应用路由器:
app
route.js
。对于您的情况,路径应为/app/api/myapi/route.js
NextRequest
的对象,与express.Request
不同如果你想继续使用应用程序路由器,那么你需要更改代码。