2017-05-03 61 views
0

我在這裏是新的,我得到無法post/api /註冊錯誤郵遞員和404在控制檯中找不到,我檢查了所有可能的問題的答案。請儘快協助我。 在此先感謝。無法POST/api /註冊在節點J

的auth.controller.js文件

var express = require ('express'); //EXPRESS Package 
var route = express.Router(); //define our app using express 
// var userModel = require('../model/user.model'); 
// var session = require('express-session'); 
var bodyParser = require('body-parser');// get body-parser 
route.use(bodyParser.json()); // for parsing application/json 
route.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded 
/** 
* 
* Register user 
*/ 
route.post('/api/register', function (req, res) { 
    console.log(req.body);//res.sendStatus(200); 
    // userModel.create(req.body).then(function() { 

    //   res.sendStatus(200); 
    // }).catch(function (err) { 

    //  res.status(400).send(err); 
    // }); 
}); 

/** 
* 
* Login user 
*/ 
route.post('/api/login', function (req, res) { 

    // userModel.authenticate(req.body.email, req.body.password).then(function() { 

    //  res.sendStatus(200); 
    // }).catch(function (err) { 

    //  res.status(400).send(err); 
    // }); 
}); 
module.exports = route; 

================================ ========================================= server.js文件

var express = require ('express'); //EXPRESS Package 
var app = express(); //define our app using express 

var cors = require('cors'); 
var session = require('express-session'); 
var bodyParser = require('body-parser');// get body-parser 
// var morgan = require('morgan'); //use to see requests 
// var assert = require('assert'); 
// var path = require('path'); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
// app.use(cors()); 

/** 
* Header Control 
*/ 
app.use(function(req, res, next) { 

    res.header('Access-Control-Allow-Credentials', true); 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,PATCH"); 
    res.header('Access-Control-Allow-Headers', 'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version'); 
    next(); 
}); 
//routes 
app.use('/api/register', require('./controllers/auth.controller')); 
app.use('/api/login', require('./controllers/auth.controller')); 
// app.use('/api/users', require('./controllers/users.controller')); 

// app.get('/api', function (req, res) { 
//  res.send('/api/login'); 
// }); 
// start server 
var server = app.listen(8001, 'localhost', function() { 

    console.log('Server listening at http://' + server.address().address + ':' + server.address().port); 
}); 

// module.exports = app; 
+1

'/ API /寄存器/ api/register /'是你定義的路由。 –

回答

0

當您使用

app.use('/api/register', require('./controllers/auth.controller')); 

這涉及到您的應用程序的一切航線轉換成require('./controllers/auth.controller')。然後require('./controllers/auth.controller')檢查url的其餘部分爲/api/register/api/login,如果您的路由器匹配,則將請求路由到相應的中間件。

換句話說,您需要發佈到/ api/register/api/register才能訪問您所需的中間件。

對於一個快速的解決方案:

您應該刪除

app.use('/api/register', require('./controllers/auth.controller')); 
app.use('/api/login', require('./controllers/auth.controller')); 

,取而代之的是:

app.use('/', require('./controllers/auth.controller')); 

爲了更好地之一:

您應該刪除

app.use('/api/register', require('./controllers/auth.controller')); 
app.use('/api/login', require('./controllers/auth.controller')); 

,取而代之的是:

app.use('/api', require('./controllers/auth.controller')); 

在app.js,並在你的auth.controller.js就應該更換:

route.post('/api/register', function (req, res) { 
    console.log(req.body);//res.sendStatus(200); 
    // userModel.create(req.body).then(function() { 

    //   res.sendStatus(200); 
    // }).catch(function (err) { 

    //  res.status(400).send(err); 
    // }); 
}); 

/** 
* 
* Login user 
*/ 
route.post('/api/login', function (req, res) { 

    // userModel.authenticate(req.body.email, req.body.password).then(function() { 

    //  res.sendStatus(200); 
    // }).catch(function (err) { 

    //  res.status(400).send(err); 
    // }); 
}); 

有:

route.post('/register', function (req, res) { 
    console.log(req.body);//res.sendStatus(200); 
    // userModel.create(req.body).then(function() { 

    //   res.sendStatus(200); 
    // }).catch(function (err) { 

    //  res.status(400).send(err); 
    // }); 
}); 

/** 
* 
* Login user 
*/ 
route.post('/login', function (req, res) { 

    // userModel.authenticate(req.body.email, req.body.password).then(function() { 

    //  res.sendStatus(200); 
    // }).catch(function (err) { 

    //  res.status(400).send(err); 
    // }); 
}); 
+0

很好..非常感謝。我從來沒想過那個。令人驚歎......但如果我有更多控制器用於更多動態頁面,那麼它會檢查auth.controller中的所有時間,或者它會直接找到目標控制器 –

+0

完全取決於您的應用程序如何使用其他控制器。在評論中講述時間太長,但這裏有一個簡短的總結:你有那些需要req和res的功能,對吧?他們再接受一個參數:接下來。如果你有一個單一路由的多個控制器,並且你調用「next();」在第一個控制器的末尾,這樣你可以調用第二個控制器。否則,你不能撥打第二個控制器。 – ardilgulez