【发布时间】:2019-08-08 14:18:00
【问题描述】:
我正在尝试使用邮递员向http://localhost:5000/api/auth/ 发送帖子请求,但它显示“无法发布 api/auth”。
我正在使用 mongo db 和 node js server.js
server.js 文件:
const express = require('express');
var connectDB = require('./config/db');
const app = express();
//connect database
connectDB();
// initializing middleware
app.use(express.json({extended: false}));
app.get('/', (req,res) =>
res.json({msg:'Hellow we are here'}));
//Define Routes
app.use('api/auth', require('./routes/auth'));
app.use('/api/users', require('./routes/users'));
app.use('/api/contacts', require('./routes/contacts'));
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log ("server running at port 5000"));
这是授权文件:
const express = require('express');
const router = express.Router();
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const {check, validationResult} = require('express-validator');
const config = require('config');
const User = require('../models/User');
//@route GET api/auth
//@desc Get logged in user
//@access private
router.get('/', (req, res)=> {
res.send('Get logged in suser');
});
//@route POST api/auth
//@desc Auth user and get token
//@access public
router.post (
'/',
[
check('email', 'Please enter a valid email').isEmail(),
check('password', 'password required').exists(),
],
async (req, res)=> {
const errors = validationResult(req);
if(!errors.isEmpty()){
return res.status(400).json({errors: errors.array()});
}
const {email , password} = req.body;
try{
let user= await User.findOne({email});
console.log(user);
if(!user)
{
return res.status(400).json({msg:"Invalid credentials"});
}
const isMatch = await bcrypt.compare(password, user.password);
if(!isMatch)
{
return res.status(400).json({msg:"Invalid credentials"});
}
const payload = {
user: { id: user.id }
};
jwt.sign(payload,
config.get('jwtSecret'),
{expiresIn: 36000},
(err, token) => {
if (err)
{ throw err;}
res.send({token});
});
}
catch (err) {
console.error(err.message);
res.status(500).send('server error');
}
});
module.exports = router;
【问题讨论】:
-
那些
check()函数调用是做什么的。请包括他们的代码。他们必须打电话给next(),否则你的路由处理程序不会被调用。 -
另外,您需要中间件来读取 POST 正文,以填充我看不到的
req.body。 -
并且,请永远不要在普通的异步回调中写入
if (err) { throw err;}。它没有任何用处。它只是退回到一些您无法捕获的异步基础架构。您最终将无法从请求中发送任何响应。 -
检查来自快速验证器。即 const {check, validationResult} = require('express-validator');它向模型字段添加验证。
-
这是我的用户代码,它工作正常:(
标签: node.js