TypeError: app.verwenden Sie() erfordert middleware-Funktionen
Dies ist mein server.js Datei-und api.js Datei. Ich bin immer ein Fehler in der sort-Funktion, in der ich beabsichtige zu suchen, die die js-Objekte entsprechend Ihrer Attribute.Die Ereignis-Schema Attribute wie name, Ort, Preis, Bewertung. Ich versuchte, Sie zu Sortieren nach Ihren Preisen.
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;
});
}
Dies ist mein Fehler. Ich mache eine Webseite für die erste Zeit mit dieser. Bitte helfen Sie mir, was bedeutet dieser Fehler sagt.
TypeError: app.verwenden Sie() erfordert middleware-Funktionen
bei EventEmitter.verwenden (c:\Users\MY APY\WebstormProjects\Main\node_modules\express\lib\application.js:209:11)
at-Modul.Exporte (c:\Users\MY LAPY\WebstormProjects\Main\app\Routen\api.js:10:9)
am Objekt. (c:\Users\MY LAPY\WebstormProjects\Main\server.js:20:36)
at-Modul._compile (Modul.js:460:26)
bei Object.Module._extensions..js (Modul.js:478:10)
at-Modul.load (module.js:355:32)
an der Funktion.- Modul._load (module.js:310:12)
an der Funktion.- Modul.runMain (Modul.js:501:10)
beim Start (- Knoten.js:129:16)
am Knoten.js:814:3
InformationsquelleAutor Nkav | 2015-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Middleware ist eine Funktion mit Zugriff auf das request Objekt (req), das response-Objekt (res), und die nächste middleware in der Anwendung request-response-Zyklus, allgemein gekennzeichnet durch eine variable namens next.
Middleware kann:
Wenn die aktuelle middleware nicht Ende der request-response-Zyklus, er muss next (), die Kontrolle an die nächste middleware, ansonsten gilt der Antrag wird hängen gelassen.
In api.js Linie Nummer 10 ist ungültig
app.verwenden Sie müssen eine Funktion mit 3 params
wenn Sie möchten, dass nur einige ausgewählte Pfade zur Nutzung dieser middleware können Sie so etwas tun
Werfen Sie einen Blick auf die expressjs-Dokumente es ist ziemlich gut.
http://expressjs.com/guide/using-middleware.html
app.use
brauchen wir nicht zu haben 3 Parameter. Es muss nur die Parameter, die Sie interessiert sind, mit.. können Sie einfach weglassennext
wenn Sie nicht daran interessiert, vorbei stromabwärts. OP ' s größte problem, neben seiner fehlerhaftenapp.use()
ist auch, dass seine externe Modul nicht wieder eine middleware, aber dieser ist montiert in seinem Haupt-Datei.danke für die Informationen, ich bin ebenso neu auf node.js.
InformationsquelleAutor Riyaz Parve
Hatte ich das problem, wenn ich Links aus
in meinem Routes.js
In meinem server.js ich hatte
So überprüfen Sie Ihre app/Routen/api' Datei, um zu sehen, wenn es mit den richtigen export.
InformationsquelleAutor sunyata
app.use
erfordert, dass Sie übergeben Sie eine Funktion, die dann verwendet als middleware. Sie haben zwei Instanzen, in denen Sie dies nicht tun, die Ursache für diesen Fehler ist; beide sind inapi.js
.api.js:10
app.use()
Sie nicht bestehen, eine Funktion zu
.use()
, und so wird dies einen Fehler verursachen. Dies ist die Fehlermeldung, die Sie sehen in Ihrem Beitrag.Allerdings erhalten Sie eine andere Fehlermeldung:
In diesem Abschnitt wird versucht zu montieren, ist der Rückgabewert Ihrer
./app/routes/api
Modul Funktion als middleware. Jedoch, können wir sehen, in Ihrem code, dass man eigentlich nicht einen Wert zurückgeben von der Funktion im api.js; Sie statt der router wieder aus dem inneren einer route-handler..Sollten Sie stattdessen verschieben Sie diese aus der Prozedur und am Ende deiner Funktion.
Den insgesamt geänderten code wird wie folgt Aussehen:
InformationsquelleAutor Dan Pantry