node.js - 我的后期操作不起作用

标签 node.js express

我正在开发一个涉及将用户注册到 mongodatabase 的项目。

我的 Mongoose 架构位于一个名为 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;

每次我尝试在 postman 中添加用户时,都会收到此错误: 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;

我做错了什么?

最佳答案

这就是问题:

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))。

关于node.js - 我的后期操作不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44335268/

相关文章:

node.js - 通过 Express/Auth0 后端登录用户

javascript - 如何使用 Node.js 创建自引用 MongoDB 模式并发布路由?

node.js - 请求正文中的 JSON 数据未使用 body-parser 进行解析

ajax - 如何从长时间的异步过程中接收实时更新?

node.js - Azure 函数 - 从磁盘读取文件并返回 HTML 页面

node.js - 从 Express 4 提供静态 html 文件

javascript - 防止 Express.js 崩溃

javascript - 无法获取/test.html - node.js - javascript

node.js - Docker Node 表示主机中的量变化未反射(reflect)在容器中

node.js - Nodemailer 可以作为独立的 SMTP 服务器吗?