2017-06-02 103 views
1

我正在研究一個涉及將用戶註冊到Mongodatabase的項目。我的文章操作不起作用

我有一個名爲user.js的文件,我的貓鼬架構,這裏是它的代碼:

const express = require('express'); 
const mongoose = require('mongoose'); 
const bcrypt = require('bcrypt'); 
const passportLocalMongoose = require('passport-local-mongoose'); 

let Schema = mongoose.Schema; 


let UserSchema = Schema({ 
    name: { 
    type: String 
    }, 

    username: { 
    type: String, 
    unique: true, 
    required: true 
    }, 

    profilePic: { 
    type: String 
    }, 

    email: { 
    type: String, 
    unique: true, 
    required: true 
    }, 

    password: { 
    type: String, 
    required: true, 
    }, 

    usersRecipes: [{type: Schema.Types.ObjectId, ref:'Recipe'}], 

    userComments: [{type: Schema.Types.ObjectId, ref: 'Recipe'}] 

}); 

let User = mongoose.model('User', UserSchema); 

module.exports = User; 

而我這裏是我的文件userRouter.js在我的代碼不能正常工作

代碼
const express = require('express'); 
const passport = require('passport'); 
const User = require('../models/user'); 
const jwt = require('jsonwebtoken'); 
const mongoose = require('mongoose'); 
const bcrypt = require('bcrypt'); 


router = express.Router(); 

router.get('/', (req, res, next) => { 
    res.send('Here are the users!') 
}); 

router.get('/:username', (req, res, next) => { 
    let nameQuery = {username: req.params.username}; 

    User.findOne(nameQuery, (err, user) =>{ 
     if (err) throw err; 
     res.json(user); 

    }) 
}); 

router.post('/register', function(req, res, next, err){ 

    User.create({ 
     username: req.body.username, 
     password: req.body.password, 
     name: req.body.name, 
     email: req.body.email, 
     profilePic: req.body.profilePic 
    }, (err, user) => { 
     if (err) return err; 

     res.json(user); 
    }); 
}); 
module.exports = router; 

每次我嘗試添加在郵遞員用戶,我得到這個錯誤: enter image description here

這裏是我的app.js文件:

let express = require('express'); 
let mongoose = require('mongoose'); 
let path = require('path'); 
let bodyParser = require('body-parser'); 
let recipeRouter = require('./routes/recipeRouter'); 
let userRouter = require('./routes/userRouter'); 
let bcrypt = require('bcrypt'); 
let passport = require('passport'); 
let LocalStrategy = require('passport-local').Strategy; 
let config = require('./config'); 

mongoose.connect(mongodb://localhost:27017); 

let db = mongoose.connection; 

db.on('error', console.error.bind(console, 'connection error:')); 

db.once('open', function() { 
    // we're connected! 
    console.log("Connected correctly to server"); 
}); 

const app = express(); 

const port = 3000; 

app.listen(port); 


app.use(express.static(path.join(__dirname, 'public'))); 

app.use(bodyParser.json()); 

app.set('views', path.join(__dirname, 'views')); 

app.use('/users', userRouter); 
app.use('/recipes',recipeRouter); 

app.get('/', function(req, res){ 
    res.send('Hey, this is your database!') 
}); 


module.exports = app; 

我在做什麼錯?

+2

你怎麼把'router'連接到你的'app'? –

+0

我只是將代碼添加到我的app.js文件中。我使用app.use()附加了userRouter,但它不起作用 – MountainSlayer

+0

在導入之前是否導出用戶路由器? – Mike

回答

1

這就是問題:

router.post('/register', function(req, res, next, err) { ... }) 

具體而言,第四err參數。傳遞一個帶有4個參數的函數對於Express來說具有內在意義,這意味着該函數是一個錯誤處理程序,在這種情況下它不是。

使用這個代替:

router.post('/register', function(req, res, next) { ... }) 

此外,稍後在你的代碼:

if (err) return err; 

你可能想拋出一個錯誤(或叫return next(err))。

+0

我將return next(err)放在註冊函數中嗎?還是我也應該把它放在其他的呢? – MountainSlayer

+0

'if(err)return next(err)'(或'if(err)throw err',無論你喜歡什麼,只是不是'if(err)return err',因爲Express忽略來自路由處理程序的返回值)。 – robertklep