Javascript Nodejs/express-Router.use()需要中间件函数,但得到一个'+;gettype(fn));
我不熟悉node和express的后端开发。我正在尝试为一个简单的博客制作一个后端,其中包含帖子和用户身份验证,以便稍后在angular 4应用程序中使用 在“Posts”端,在使用chrome的插件“Postman”进行测试后,一切似乎都很好,但当我开始在“Users”端工作时,它不断抛出错误: “Router.use()需要中间件函数,但得到了'+gettype(fn));” 当我尝试运行服务器时。代码如下: app.jsJavascript Nodejs/express-Router.use()需要中间件函数,但得到一个'+;gettype(fn));,javascript,node.js,express,Javascript,Node.js,Express,我不熟悉node和express的后端开发。我正在尝试为一个简单的博客制作一个后端,其中包含帖子和用户身份验证,以便稍后在angular 4应用程序中使用 在“Posts”端,在使用chrome的插件“Postman”进行测试后,一切似乎都很好,但当我开始在“Users”端工作时,它不断抛出错误: “Router.use()需要中间件函数,但得到了'+gettype(fn));” 当我尝试运行服务器时。代码如下: app.js //Imports const express = re
//Imports
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const mongo = require('mongodb');
const mongoose = require('mongoose');
const passport = require('passport');
const cors = require('cors');
const config = require('./config/database');
//initialize App
var app = express();
//Setting port
var port = 3000;
//initialize cors
app.use(cors());
//Set static folder
app.use(express.static(path.join(__dirname,'../client/src')));
//initialize body parser
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
//Root route
app.get('/', function(req,res) {
res.send('Welcome to my API');
});
//Listen to port
app.listen(port, function () {
console.log('Server is running on post: ' + port);
});
//connection to DB
mongoose.connect(config.database);
mongoose.connection.on('connected', function () {
console.log('Connected to database' + config.database);
});
mongoose.connection.on('error', function (err) {
console.log('Database error' + err);
});
//Models
var Post = require('./models/post');
var User = require('./models/user');
//Routes
var postRouter = require('./routes/posts')(Post);
var userRouter = require('./routes/users')(User);
//Initialize routes
app.use('/api/posts', postRouter);
app.use('/api/users', userRouter);
models/user.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userModel = new Schema({
name: {type: String},
email: {type: String, required:true},
username: {type: String, required:true},
password: {type: String, required:true}
});
module.exports = mongoose.model('Users',userModel);
routes/users.js
var express = require('express');
var passport = require('passport');
var jwt = require('jsonwebtoken');
var userRoutes = function(User) {
var UserRouter = express.Router();
var userController = require('../controllers/userController')(User);
//Register
UserRouter.route('/register').post(userController.post);
//Authenticate
UserRouter.route('/authenticate').get();
//Profile
UserRouter.route('/profile').get();
};
module.exports = userRoutes;
controllers/userController.js
var userController = function(User) {
var post = function(req,res) {
var bcrypt = require('bcryptjs');
//creating new instance of model and pass the bodyParser
var user = new User(req.body);
if(!req.body.username) {
res.status(400);
res.send('Name is required');
}
else if (!req.body.password) {
res.status(400);
res.send('Password is required');
}
else if (!req.body.email) {
res.status(400);
res.send('Email is required');
}
else {
bcrypt.hash(user.password, function (err, hash) {
user.password = hash;
});
//saving in db
user.save();
//status 201 means created
res.status(201);
//send result
res.send(user);
}
};
return {
post: post
};
};
module.exports = userController;
当我使用初始化用户路由时出现问题
app.use('/api/users', userRouter);
在app.js中“Router.use()需要中间件函数,但得到了'+gettype(fn));”
错误来自以下行:
app.use('/api/users', userRouter);
app.use需要路径和中间件功能。你回来了
一个简单的函数,而不是中间件,这就是为什么会出现错误
在routes/users.js中,您只需返回express.Router中间件函数
var express = require('express');
var passport = require('passport');
var jwt = require('jsonwebtoken');
var userRoutes = function(User) {
var UserRouter = express.Router();
var userController = require('../controllers/userController')(User);
//Register
UserRouter.route('/register').post(userController.post);
//Authenticate
UserRouter.route('/authenticate').get();
//Profile
UserRouter.route('/profile').get();
// UserRouter is a middleware function
return UserRouter;
};
module.exports = userRoutes;
请参阅此处的快速路由器部分:“router.use()需要中间件函数,但得到了一个“+gettype(fn));”
错误来自以下行:
app.use('/api/users', userRouter);
app.use需要路径和中间件功能。你回来了
一个简单的函数,而不是中间件,这就是为什么会出现错误
在routes/users.js中,您只需返回express.Router中间件函数
var express = require('express');
var passport = require('passport');
var jwt = require('jsonwebtoken');
var userRoutes = function(User) {
var UserRouter = express.Router();
var userController = require('../controllers/userController')(User);
//Register
UserRouter.route('/register').post(userController.post);
//Authenticate
UserRouter.route('/authenticate').get();
//Profile
UserRouter.route('/profile').get();
// UserRouter is a middleware function
return UserRouter;
};
module.exports = userRoutes;
请参见此处的快速路由器部分:是的,我刚刚输入了“return UserRouter”;我正要发布我问题的答案。非常感谢您的反馈!是的,我刚刚输入了“return UserRouter”;我正要发布我问题的答案。非常感谢您的反馈!