这是我的server.js文件和api.js文件。我在sort函数中遇到错误,我打算根据它们的属性搜索js对象。事件Schema具有名称,位置,价格,评级等属性。我试着根据它们的价格对它进行分类。
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;
});
}
这是我的错误。我是第一次使用这个网页。请帮助我这个错误告诉我什么。
TypeError: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)
在Module._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
答案 0 :(得分:5)
中间件是一个函数,可以访问请求对象(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
答案 1 :(得分:5)
我被拒之门外
module.exports = routers
在我的Routes.js中
在我的server.js中,我有
var mainRoutes = require('./Routes.js')
app.use(mainRoutes)
因此,请检查您的“ app / routes / api”文件,查看其是否具有正确的导出功能。
答案 2 :(得分:5)
你需要在路由文件底部导出你的路由器
喜欢这个module.exports = router;
并在 app.js 文件中使用
const mainRoutes = require('./Routes.js')
app.use(mainRoutes)
享受吧!
答案 3 :(得分:1)
app.use
要求您传递一个函数,然后将其用作中间件。你有两个实例,你不这样做会导致这个错误;两者都在api.js
。
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;
}