Así que tengo 1 solicitud que es
app.get('/assignment/loans', (req, res) => { const id = req.query.bookID; }y otra que es esta:
app.get('/assignment/loans', (req, res) => { const id = req.query.studentID; }Por alguna razón, el ID de estudiante no funciona y siempre va al ID de libro para buscar. yo uso esto
http://localhost:3000/assignment/loans?bookID=1
y funciona según lo previsto, pero si uso
http://localhost:3000/assignment/loans?studentID=9653
Yo obtengo:
que es un error que solo debería aparecer para el bookID. ¿Cómo puedo diferenciar los dos? Gracias de antemano.
Más código sobre las dos solicitudes: https://pastebin.com/1A0jK3BX
No puede tener 2 rutas con la misma URL. el primero tiene prioridad. Tienes que manejarlo así.
app.get('/assignment/loans', (req, res) => { const bookID = req.query.bookID; const studentID = req.query.studentID; if(bookID){ } if(studentID){ } }en realidad, express framework ejecutará el primer punto final cuando se produzca la solicitud, que es
app.get('/assignment/loans', (req, res) => { const id = req.query.bookID;})en caso de punto final duplicado, por lo que debe usar una ruta y poner dos consultas en lugar de una para que el código sea así
app.get('/assignment/loans', (req, res) => { const book_id = req.query.bookID; const student_id = req.query.studentID })también debe realizar la validación de las consultas antes de ejecutarlas en db
Tienes exactamente las mismas rutas
app.get('/assignment/loans', ...) tiene que ser una ruta.
Intenta combinarlos así a continuación
app.get('/assignment/loans', (req, res) => { const bookId = req.query.bookID; const studentId = req.query.studentID; const loans = []; if(bookId){ if(!Number.isInteger(parseInt(studentId))){ return res.status(422) .setHeader('content-type', 'application/json') .send({error: 'bookId not numeric'}); } db.all('SELECT * FROM loan WHERE bookID=?', bookId, (err, rows) => { if (err) { res.status(422) .setHeader('content-type', 'application/json') .send({error: 'Problem while querying database'}); return; } if (rows.length === 0) { res.status(404) .setHeader('content-type', 'application/json') .send({error: 'loan bookId was not found!'}); } else { rows.forEach(row => loans.push({id: `${row.id}`, bookID: `${row.bookID}`})); res.status(200) .setHeader('content-type', 'application/json') .send(loans); } }); }else if(studentId){ if(!Number.isInteger(parseInt(studentId))){ return res.status(422) .setHeader('content-type', 'application/json') .send({error: 'studentId not numeric'}); } db.all('SELECT * FROM loan WHERE studentID=?', studentId, (err, rows) => { if (err) { return res.status(422) .setHeader('content-type', 'application/json') .send({error: 'Problem while querying database'}); } if (rows.length === 0) { res.status(404) .setHeader('content-type', 'application/json') .send({error: 'loan studentId was not found!'}); } else { rows.forEach(row => loans.push({id: `${row.id}`, studentID: `${row.studentID}`})); res.status(200) .setHeader('content-type', 'application/json') .send(loans); } }); }else{ return res.status(400) .setHeader('content-type', 'application/json') .send({error: 'Please provide required query string'}); } });