繁体   English   中英

如何自定义 express 网络服务器中的 ENOENT 错误?

[英]How can I customize the ENOENT error inside an express webserver?

我正在制作文本托管服务,我希望它显示“未找到 TextMessage。您可以通过单击此处以名称创建一个”,但我不知道该怎么做,我尝试制作自定义 404 错误,并且通过节点 fs 模块检测文件是否存在。 那没有成功。

这是我的代码:

// Importing require packages/modules  
const express = require("express");  
const bodyParser = require("body-parser");  
const fs = require("fs");  
// Defining needed variables  
const app = express();  
const PORT = 3000;  
// Express midleware to enable body-parser  
app.use(bodyParser.urlencoded({ extended: false }));  
// Express static handler  
app.use(express.static("public"));  
// POST API To create message/file  
app.post("/api/message/submit", (req, res) => {  
  const file = req.body.messageText;  
  const fileID = req.body.messageID;  
  fs.writeFile(__dirname + "/messageFiles/" + fileID + ".txt",  
 file, (err) => {  
    if (err) res.send("ERROR! <br>" + err);  
    else res.send("Saved");  
  });  
});  
// GET API To read message/file        
app.get("/message/:id", (req, res) => {     
  const msg = req.params.id;    
  if (fs.existsSync(__dirname + "/messageFile/" + msg + ".txt")) {   
    res.sendFile(__dirname + "/messageFiles/" + msg + ".txt");   
  } else {    
    res.send("Message does not exist");    
  }   
});   
// Running the server  
app.listen(PORT, () => {  
  console.log("Running on port: " + PORT);  
});    

`

您可以尝试通过用trycatch块包装文件来异步写入文件。 看来你的文件路径有问题。

我建议你有一个辅助函数来写入文件和从文件中读取:

const create = async (data, fileName) => {
    try {
        const text = await fs.writeFile(`./files/${fileName}.txt`, data);
        console.log('File write successful!');
    } catch (error) {
        throw new Error('File write operation failed');
    }
};

const read = async (fileName) => {
    try {
        const fileContent = await fs.readFile(`./files/${fileName}.txt`, {encoding: 'utf-8'});
        return fileContent;
    } catch (error) {
        throw new Error('File read operation failed');
    }
};

app.post("/api/message/submit", async (req, res) => {  
  const fileContent = req.body.messageText;  
  const fileID = req.body.messageID;  
  const message = await create(fileContent, fileID);
  message ? res.send('Successful') : res.send('Failed');
});

app.get("/message/:id", async (req, res) => {     
  const msgID = req.params.id;    
  const message = await read(msgID);
  res.send(message);
});  

我希望它有所帮助!

PS:不要使用太多评论。 您的代码应该是自我记录的(可读的)!

PSS:在(req, res)之前添加了async关键字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM