TypeError:app.use()需要中间件函数
TypeError: app.use() requires middleware functions
这是我的server.js文件和api.js文件。我在排序函数中遇到了一个错误,我打算在该函数中根据js对象的属性搜索它们。事件架构具有名称、位置、价格、评级等属性。我试着按照他们的价格分类。
server.js
var express= require('express');
var bodyParser= require('body-parser');
var morgan = require('morgan');
var config=require('./config');
var app= express();
var mongoose=require('mongoose');
//var User=require('./database/user')
mongoose.connect('mongodb://localhost:27017/db',function(err){
if(err){
console.log(err);
}
else{
console.log("connected!");
}
});
app.use(bodyParser.urlencoded({extended: true })); //if false then parse only strings
app.use(bodyParser.json());
app.use(morgan('dev'));//log all the requests to the console
var api=require('./app/routes/api')(app,express);
app.use('/api',api);
app.get('*',function(req,res){
res.sendFile(__dirname + '/public/views/index.html');
}); // * means any route
app.listen(config.port,function(err){
if(err){enter code here
console.log(err);
}
else{
console.log("The server is running");
}
});
module.exports = router;
api.js
var User = require('../models/user');
var Event = require('../models/event');
var config = require('../../config');
var secret = config.secretKey;
module.exports = function (app, express) {
var api = express.Router();
app.use()
api.post('/signup', function (req, res) {
var user = new User({
name: req.body.name,
username: req.body.username,
password: req.body.password
});
user.save(function (err) {
if (err) {
res.send(err);
return;
}
res.json({
message: 'User created!'
});
});
});
api.get('/users', function (req, res) {
User.find({}, function (err, users) {
if (err) {
res.send(err);
return;
}
res.json(users);
});
});
api.post('/eventfeed', function (req, res) {
var event = new Event({
name: req.body.name,
location: req.body.location,
description: req.body.description,
price: req.body.price,
rating: req.body.rating
});
event.save(function (err) {
if (err) {
res.send(err);
return;
}
res.json({
message: 'Event created!'
});
});
});
// utility function for sorting an array by a key in alpha order
api.get('/sortby_price', function (err) {
if (err) return err;
// utility function for sorting an array by a key in parsed numeric order
else {
function sortArrayNum(arr, key) {
arr.sort(function (a, b) {
return parseInt(a[key], 10) - parseInt(b[key], 10);
});
}
var dicts = EventSchema.saved;
for (var i = 0; i < dicts.length; i++) {
var terms = dicts[i].terms;
sortArrayNum(terms, "price");
}
}
return api;
});
}
这是我的错误。我第一次用这个制作网页。请帮我这个错误告诉什么。
类型错误:app.use((需要中间件功能
在EventEmitter.use(c:''Users''MY APY''WebstormProjects''Main''node_modules''express''lib''application.js:209:11(
在module.exports(c:''Users''MY LAPY''WebstormProjects''Main''app''routes''api.js:10:9(
在对象处。(c:''Users''MY LAPY''WebstormProjects''Main''server.js:20:36(
在模块中_compile(module.js:460:26(
位于Object.Module_extensions..js(Module.js:478:10(
在Module.load(Module.js:355:32(
在Function.Module_load(Module.js:310:12(
位于Function.Module.runMain(Module.js:501:10(
启动时(node.js:129:16(
在node.js:814:3
我在遗漏时遇到了这个问题
module.exports = router;
在我的Routes.js中。我们需要导出所有的路由。
在我的server.js中,我有
var mainRoutes = require('./Routes.js')
app.use(mainRoutes)
因此,请检查你的"app/routes/api"文件,看看它是否有正确的导出。
中间件是一个访问应用程序请求-响应周期中的请求对象(req(、响应对象(res(和下一个中间件的函数,通常由名为next的变量表示。
中间件可以:
- 执行任何代码
- 对请求和响应对象进行更改
- 结束请求-响应周期
- 调用堆栈中的下一个中间件
如果当前中间件没有结束请求-响应周期,它必须调用next((将控制权传递给下一个中间件,否则请求将挂起。
在api.js中,行号10是无效的
app.use()
app.use必须有一个具有3个参数的函数
// a middleware with no mount path; gets executed for every request to the app
app.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
如果你只想选择几个路径来使用这个中间件,你可以做一些类似的事情
// a middleware mounted on /user/:id; will be executed for any type of HTTP request to /user/:id
app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
// a route and its handler function (middleware system) which handles GET requests to /user/:id
app.get('/user/:id', function (req, res, next) {
res.send('USER');
});
看看expressjs文档,它非常好。http://expressjs.com/guide/using-middleware.html
您需要在路由文件的底部导出路由器
像这个module.exports = router;
并在app.js文件中使用
const mainRoutes = require('./Routes.js')
app.use(mainRoutes)
享受吧!
app.use
要求您向它传递一个函数,然后将其用作中间件。您有两个不这样做的实例,这将导致此错误;两者都在CCD_ 3中。
api.js:10
app.use()
您没有将函数传递给.use()
,因此这将导致错误。这就是你在帖子中看到的错误。
然而,你会得到另一个错误:
var api=require('./app/routes/api')(app,express);
app.use('/api',api);
本节尝试将./app/routes/api
模块函数的返回值挂载为中间件。然而,我们可以在代码中看到,您实际上并没有从api.js中的函数返回值;而是从路由处理程序内部返回路由器。。
// utility function for sorting an array by a key in alpha order
api.get('/sortby_price', function (err) {
if (err) return err;
// utility function for sorting an array by a key in parsed numeric order
else {
function sortArrayNum(arr, key) {
arr.sort(function (a, b) {
return parseInt(a[key], 10) - parseInt(b[key], 10);
});
}
var dicts = EventSchema.saved;
for (var i = 0; i < dicts.length; i++) {
var terms = dicts[i].terms;
sortArrayNum(terms, "price");
}
}
return api; // <- this will be returned inside the app.get call
});
相反,您应该将其从处理程序中移到函数的末尾。
修改后的代码总额如下:
module.exports = function (app, express) {
var api = express.Router();
..omitted for brevity..
// utility function for sorting an array by a key in alpha order
api.get('/sortby_price', function (err) {
if (err) return err;
// utility function for sorting an array by a key in parsed numeric order
else {
function sortArrayNum(arr, key) {
arr.sort(function (a, b) {
return parseInt(a[key], 10) - parseInt(b[key], 10);
});
}
var dicts = EventSchema.saved;
for (var i = 0; i < dicts.length; i++) {
var terms = dicts[i].terms;
sortArrayNum(terms, "price");
}
}
});
return api;
}
我最近遇到了同样的问题。我导出模块如下:
module.exports = { router };
删除大括号为我修复了错误。
module.exports = router;
在我的案例中,此错误是由于写入而发生的
app.use('/v1/tutorials');
而不是
app.use('/v1/tutorials',router);
我最初的函数是app.use('/api/cars'. carRoutes)
,在那里我遇到了错误:
TypeError:app.use((需要中间件函数的
因为我在"api/cars"answers"carRoutes"之间有一个完整的站点。
我改成逗号,就不再碰到这个问题了。
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 什么'在Express中路由时,应用程序级中间件和路由器级中间件之间的区别是什么
- Redux中间件在next()之前更改状态
- 快速的套接字 io 实例/中间件
- 如何使用Express'正确加载图像;s的静态中间件
- Router.use()需要中间件函数,但得到了一个未定义的函数
- 谁在Express中间件中提供next()函数
- Express JS - 对路由和中间件使用匿名函数
- 在redux中使用thunk中间件比使用常规函数作为异步操作创建者有什么好处
- 如何从express中间件函数传递值
- TypeError:app.use()需要中间件函数
- 为什么这段代码作为中间件而不是作为函数工作得很好?
- App.use()需要中间件函数
- 如何在中间件函数中迭代Mongoose模型属性
- 编写koa异步函数中间件时出错
- 在express js的中间件函数中获取会话变量
- TypeError:当向Redux添加中间件时,getState不是一个函数
- react redux中动作函数的目的是什么?它们是否都返回一个动作或函数,然后转到存储/中间件
- 获取一个函数,在继续之前等待post中间件保存完成
- 套接字.IO中间件函数