簡體   English   中英

Node.JS Express Route 僅針對特定路由導致 404

[英]Node.JS Express Route results in 404 Only For a Specific Route

我的 node.js 快遞路線有問題。 我真的很新,看不到我的錯誤。 我也在 Stackoverflow 上閱讀過類似的帖子,但仍然沒有設法解決這個問題。 也許有人可以幫助發現錯誤。

我創建了 4 條路由:home-routes.js、user-routes、tech-routes.js 和user-auth.js 只有 user-auth.js 路由在向 http://localhost:8001/api/auth 或 http://localhost:8001/api/auth/ 發送請求時不斷收到 404 錯誤

這是我的server.js

const mongoose = require('mongoose');
mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
mongoose.set('useUnifiedTopology', true);

const express = require('express');
const router = express.Router();

const { func } = require('joi');
const Joi = require('joi');
const helmet = require('helmet')
const morgan = require('morgan')
const config = require('config');
const debug = require('debug')('app:startup');


const home_routes = require('./api/routes/home-routes');
const technology_routes = require('./api/routes/tech-routes');
const user_routes = require('./api/routes/user-routes');
const user_auth = require('./api/routes/user-auth');

// ======================================
//              APP-CONFIG
// ======================================
const app = express();
const port = process.env.PORT || 8001;
const connection_url = `mongodb+srv://${username}:${password}@cluster0.zmc6p.mongodb.net/upss-db?retryWrites=true&w=majority`


// ======================================
//              DB CONFIG
// ======================================
mongoose.connect(connection_url)
    .then(() => console.log('Connected to MongoDB...'))
    .catch(err => console.error('Could not connect to MongoDB...', err));

// ======================================
//              MIDDLE-WARES
// ======================================

app.use(express.json());
app.use(express.urlencoded({ extended: true })); //parse url key=value to json
app.use(express.static('public')); //static assets inside folder 'public'
app.use(helmet());


// ======================================
//         API-ENDPOINTS-PREFIX
// ======================================
app.use('/', home_routes);
app.use('/api/tech', technology_routes);
app.use('/api/user', user_routes);
app.use('./api/auth', user_auth);

//Capture All 404 errors
app.use(function (req, res, next) {
    res.status(404).send('Unable to find the requested resource!');
});


// ======================================
//              LISTENERS
// ======================================

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

這是user-auth.js

const mongoose = require('mongoose');
const express = require('express');
const router = express.Router();
const _ = require('lodash');
const bcrypt = require('bcrypt');

const { User } = require('../models/user-schema');


router.get('/', (req, res) => {
    res.status(200).send("GET ALL TECHS");
});


// ======================================
//              POST REQUEST
// ======================================

/* CREATE ONE NEW USER */

router.post('/', async (req, res) => {
    const { error } = validateEmailPassword(req.body);
    if (error) return res.status(400).send(error.details[0].message);

    // The user with this email is not found in the DB
    let user = await User.findOne({ email: req.body.email });
    if (!user) return res.status(400).send('Invalid email or password!');

    // Password does not match with our DB
    const validPassword = await bcrypt.compare(req.body.password, user.password);
    if (!validPassword) return res.status(400).send('Invalid email or password!');

    res.send(true);

});


function validateEmailPassword(req) {
    const validationSchema = Joi.object({
        email: Joi.string().min(5).max(255).required().email(),
        password: Joi.string().min(5).max(255).required()
    });
    return validationSchema.validate(req);
}

module.exports = router;

user-routes.js中的另一條路線可以正常工作。

const mongoose = require('mongoose');
const express = require('express');
const router = express.Router();
const _ = require('lodash');
const bcrypt = require('bcrypt');

const { User, validateUser } = require('../models/user-schema');


router.get('/', (req, res) => {
    res.status(200).send("GET ALL USERS");
});



/* CREATE ONE NEW USER */

router.post('/', async (req, res) => {
    const { error } = validateUser(req.body);
    if (error) return res.status(400).send(error.details[0].message);

    // Make sure the user not already registered
    let user = await User.findOne({ email: req.body.email });
    if (user) return res.status(400).send('User already registered!');
    user = new User(_.pick(req.body, ['firstName', 'lastName', 'email', 'password']));
    const salt = await bcrypt.genSalt(10);
    user.password = await bcrypt.hash(user.password, salt);
    await user.save();


    res.send(_.pick(user, ['_id', 'firstName', 'lastName', 'email']));

});



module.exports = router;

也許你想要

app.use('/api/auth', user_auth);

不是

app.use('./api/auth', user_auth);

在您的server.js文件中,因為它似乎是一個錯字問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM