【问题标题】:Could not able to post data on node server无法在节点服务器上发布数据
【发布时间】: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


【解决方案1】:

在您定义路线的位置缺少前导斜杠。这是

//Define Routes
app.use('api/auth', require('./routes/auth'));

但应该是的

//Define Routes
app.use('/api/auth', require('./routes/auth'));

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多