如何解决Node.JS Express Route 导致 404 Only For a specific Route
我的 node.js 快速路由有问题。我真的很新,看不到我的错误。我也在 Stackoverflow 上阅读了类似的线程,但仍然没有设法解决这个问题。也许有人可以帮助发现错误。
我创建了 4 条路由:home-routes.js、user-routes、tech-routes.js 和 user-auth.js。向 http://localhost:8001/api/auth 或 http://localhost:8001/api/auth/
发送请求时,只有 user-auth.js 路由会不断收到 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('/',res) => {
res.status(200).send("GET ALL USERS");
});
/* CREATE ONE NEW USER */
router.post('/',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','email']));
});
module.exports = router;
解决方法
也许你想要
app.use('/api/auth',user_auth);
不是
app.use('./api/auth',user_auth);
在您的 server.js
文件中,因为它似乎是一个错字问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。