Express 服务器不响应路由请求

时间:2021-06-27 06:16:09

标签: node.js express routes express-router

我的快递服务器没有响应任何路由请求,无论如何我都不走运。

以下是我尝试访问的路线:

  • http://localhost:3000/api/files
  • http://localhost:3000/files/<:uuid>
  • http://localhost:3000/api/files/send

终端输出:

enter image description here

通过失眠做出反应:

enter image description here

以下是项目文件

server.js

const express = require('express');
const app = express();
const path = require('path');

app.use(express.static('public'));
app.use(express.json);

const PORT = process.env.PORT||3000;

const connectDB = require('./config/db');
connectDB();

app.set('views', path.join(__dirname, '/views'));
app.set('view engine', 'ejs');

app.use('/api/files', require('./routes/files'));
app.use('/files', require('./routes/show'));
app.use('/files/download', require('./routes/download'));
console.log("Server");

app.listen(PORT, () =>{
    console.log(`Listening on port ${PORT}`);
});

routes/files.js

const router = require('express').Router();
const multer = require('multer');
const path = require('path');
const File = require('../models/file');
const {v4 : uuid4} = require('uuid');
const sendMail = require('../services/email');
require('dotenv').config();


let storage = multer.diskStorage({
    destination: (req, file, cb) => cb(null, 'uploads/'),
    filename: (req, file, cb) => {
        const uniqueName = `${Date.now()}-${Math.round(Math.random() * 1E9)}${path.extname(file.originalname)}`;
        cb(null, uniqueName)
    },
});

let upload = multer({
    storage:storage,
    limit: { fileSize: 100000*200},
}).single('myfile');

router.post('/', (req, res) => {
    console.log("Reached here");
    console.log(req);
    // store locally
    upload(req, res, async (err) => {
        // check for valid req
        if(!req.file){
            return res.json({
                error: "Error processing file!"
            });
        }
        if(err){ return res.status(500).send({error: err.message})}

        // store in db
        const file = File({
            filename: req.file.filename,
            uuid: uuid4(),
            path: req.file.path,
            size: req.file.size,
        });
        
        const response = await file.save();
        return res.json({file: `${process.env['APP_BASE_URL']}/files/${response.uuid}`})

    });

    //return link
});


router.post('/send', async (req, res) => {
    console.log(req.body);
    const {uuid, emailTo, emailFrom} = req.body;
    if(!uuid || !emailTo || !emailFrom){ return res.status(422).send({error: 'All files are required.'});}
    const file = await File.findOne({uuid: uuid});
    if(file.sender){
        return res.status(422).send({error: 'Email already sent.'});
    }


    file.sender = emailFrom;
    file.receiver = emailTo;
    const response = await file.save();
    sendMail({
        from: emailFrom,
        to: emailTo,
        subject: "shareMe File Sharing",
        text: `${emailFrom} shared a file with you`,
        html: require('../service/template')({
            emailFrom: emailFrom, 
            downloadLink: `${process.env['APP_BASE_URL']}/files/${file.uuid}`,
            size: parseInt(file.size/1000)+'KB', 
            expires: '24 hours'
        })
    });

    return res.send({success: true});
});

module.exports=router;

routes/show.js

const router = require('express').Router();
const File = require('../models/file');

router.get('/:uuid', async (req, res) => {
    try{
        const file = await File.findOne({
            uuid: req.params.uuid
        });

        if(!file){
            return res.render('download', {error: 'File not fetched.'});
        }

        console.log(`${process.env['APP_BASE_URL']}/files/download/${file.uuid}`);

        return res.render('download', {
            uuid: file.uuid,
            fileName: file.filename,
            size: file.size,
            downloadLink: `${process.env['APP_BASE_URL']}/files/download/${file.uuid}`,
        });
    }catch(err){
        return res.render('download', {error: 'Something seems to be upset :('});
    }
    
});

module.exports = router;

routes/download.js

const router = require('express').Router();
const File = require('../models/file');

router.get('/:uuid', async (req, res) => {
   // Extract link and get file from storage send download stream 
   const file = await File.findOne({ uuid: req.params.uuid });
   // Link expired
   if(!file) {
        return res.render('download', { error: 'Link has been expired.'});
   } 
   const response = await file.save();
   const filePath = `${__dirname}/../${file.path}`;
   res.download(filePath);
});


module.exports = router;

0 个答案:

没有答案