Router.use()需要中间件函数,但得到了一个未定义的函数
Router.use() requires middleware function but got a undefined
我正在尝试设置我的节点服务器/RESTapi。
为此,我有几个不同的文件:
division''ymodel.js:
module.exports = function(express, sequelize)
{
var router = express.Router();
router.route('/division');
var DataTypes = require("sequelize");
var Division = sequelize.define('division', {
id: DataTypes.INTEGER,
organization_id: DataTypes.INTEGER,
location_id: DataTypes.INTEGER,
name: DataTypes.STRING,
parent_id: DataTypes.INTEGER
}, { freezeTableName: true,
instanceMethods: {
retrieveAll: function (onSuccess, onError) {
Division.findAll({}, {raw: true})
.ok(onSuccess).error(onError);
},
retrieveById: function (user_id, onSuccess, onError) {
Division.find({where: {id: user_id}}, {raw: true})
.success(onSuccess).error(onError);
},
add: function (onSuccess, onError) {
var username = this.username;
var password = this.password;
var shasum = crypto.createHash('sha1');
shasum.update(password);
password = shasum.digest('hex');
Division.build({username: username, password: password})
.save().ok(onSuccess).error(onError);
},
updateById: function (user_id, onSuccess, onError) {
var id = user_id;
var username = this.username;
var password = this.password;
var shasum = crypto.createHash('sha1');
shasum.update(password);
password = shasum.digest('hex');
Division.update({username: username, password: password}, {where: {id: id}})
.success(onSuccess).error(onError);
},
removeById: function (user_id, onSuccess, onError) {
Division.destroy({where: {id: user_id}}).success(onSuccess).error(onError);
}
}
}
);
// on routes that end in /users/:user_id
// ----------------------------------------------------
router.route('/division/:division_id')
// update a user (accessed at PUT http://localhost:8080/api/users/:user_id)
.put(function (req, res) {
var user = User.build();
Division.username = req.body.username;
Division.password = req.body.password;
Division.updateById(req.params.division_id, function (success) {
console.log(success);
if (success) {
res.json({message: 'User updated!'});
} else {
res.send(401, "User not found");
}
}, function (error) {
res.send("User not found");
});
})
// get a user by id(accessed at GET http://localhost:8080/api/users/:user_id)
.get(function (req, res) {
var Division = Division.build();
Division.retrieveById(req.params.division_id, function (users) {
if (users) {
res.json(users);
} else {
res.status(401).send("User not found");
}
}, function (error) {
res.send("User not found");
});
})
// delete a user by id (accessed at DELETE http://localhost:8080/api/users/:user_id)
.delete(function (req, res) {
var division = Division.build();
division.removeById(req.params.division_id, function (users) {
if (users) {
res.json({message: 'User removed!'});
} else {
res.status(401).send("User not found");
}
}, function (error) {
res.send("User not found");
});
});
};
还有我的服务器.js
// BASE SETUP
// =============================================================================
var express = require('express'),
bodyParser = require('body-parser');
var app = express();
var router = express.Router();
var es = require('express-sequelize');
// =============================================================================
// IMPORT MODELS
// =============================================================================
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
var env = app.get('env') == 'development' ? 'dev' : app.get('env');
var port = process.env.PORT || 8080;
var Sequelize = require('sequelize');
// db config
var env = "dev";
var config = require('./database.json')[env];
var password = config.password ? config.password : null;
// initialize database connection
var sequelize = new Sequelize(
config.database,
config.user,
config.password,
{
logging: console.log,
define: {
timestamps: false
}
}
);
//================================================================================
var division_model = require('./Divisions/division_model')(express,sequelize, router);
app.use('/division', division_model);
// REGISTER ROUTES
// =============================================================================
app.use('/api', app.router);
// START THE SERVER
// =============================================================================
app.listen(port);
console.log('Magic happens on port ' + port);
然而,在启动服务器时,我会收到以下错误消息:
throw new TypeError('Router.use() requires middleware function but got a
^
TypeError: Router.use() requires middleware function but got a undefined
at Function.<anonymous> (/var/www/example/backend/node_modules/express/lib/router/index.js:446:13)
at Array.forEach (native)
at Function.use (/var/www/example/backend/node_modules/express/lib/router/index.js:444:13)
at EventEmitter.<anonymous> (/var/www/example/backend/node_modules/express/lib/application.js:187:21)
at Array.forEach (native)
at EventEmitter.use (/var/www/example/backend/node_modules/express/lib/application.js:184:7)
at Object.<anonymous> (/var/www/example/backend/server.js:42:5)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
有人能告诉我为什么会发生这种事吗?
您必须在中间件中返回一个路由器:
app.use('/division', division_model);
因此,您的模块导出功能应该以结束
return router;
在设置时,您也会有相互矛盾的想法。如果你想让应用程序将路线定义为/didivision,你可以在这里这样做:
app.use('/division', division_model);
那么你就不需要像这里那样重新定义路线:
var router = express.Router();
router.route('/division');
你可以简单地:
app.use(division_model);
--或--
/**
* division_model.js
*/
var router = express.Router();
router.route('/');
//omitting route code
router.route('/:division_id');
//omitting route code
return router;
/**
* server.js
*/
app.use('/division', division_model);
因为您导出的模块中有一个函数,所以您需要在函数结束时返回位于division''ymodel.js的路由器
return router;
这应该工作
相关文章:
- 现有函数未定义
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- AngularJS ng repeat显示原型函数未定义
- jQuery onclick 函数:未定义不是一个函数
- 函数未定义
- 为什么在jsfiddle中显示ReferenceError:函数未定义
- 函数未定义,实际定义时为
- 函数未定义的Javascript(Basic)
- ajax函数未定义
- 为什么window.onload函数未定义
- 模块模式:函数未定义
- 包含的javascript源代码通过PHP,onmousemove事件,函数未定义
- 单击链接时出现函数未定义错误
- AngularJS和Angular Snap:SSnap构造函数未定义
- 在Node.js中,从同一文件中的另一个函数引用一个函数会导致'ReferenceError:-函数-未定义
- symfony trick javascript函数未定义
- 不断获取JS函数未定义错误
- AngularJS HTTP 资源 - 响应函数未定义
- 函数未定义,参数格式
- JavaScript 中的函数未定义