【发布时间】:2020-04-10 07:52:47
【问题描述】:
我目前正在尝试 node & express。该项目是一个小型电影库。今天我尝试实现对电影标题的搜索,我遇到的问题是当我提交表单并获取我的查询字符串时,像这样http://localhost:3000/movies/?title=Hustlers 我得到了我数据库中的所有数据。但是当我像http://localhost:3000/movies/title=Hustlers 这样手动输入网址时,它工作正常,我得到了匹配的结果。我试图改变我的路线,但我现在卡住了。
这里是movies.js
const express = require("express");
const router = express.Router();
const Movie = require("../models/movie");
//Get Back all the movies
router.get("/", async (req, res) => {
try {
const movies = await Movie.find();
res.json(movies);
} catch (err) {
res.json({ message: err });
}
});
//specific Movie
router.get("/title=:title", async (req, res) => {
try {
const movie = await Movie.find({ title: req.params.title });
res.json(movie);
} catch (err) {
res.json({ message: err });
}
});
module.exports = router;
我的 app.js
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const mongoose = require("mongoose");
const cors = require("cors");
require("dotenv/config");
//Middlewares
app.use(bodyParser.json());
app.use(cors());
app.use(express.urlencoded());
const moviesRoute = require("./routes/movies");
app.use("/movies", moviesRoute);
app.use(express.static(__dirname + "/"));
mongoose.connect("mongodb://localhost:27017/testDB", { useNewUrlParser: true });
app.listen(3000);
我在这里提交表单
<form action="/movies/">
<input type="text" name="title" />
<input
type="submit"
value="Suchen"
class="btn btn-primary btnNewMovie"
/>
</form>
【问题讨论】:
-
“?”在您的第一个 localhost 地址中使
title成为查询参数,而不是路由参数。获取查询参数,例如。http://localhost:3000/movies?title=Hustlers,使用req.query.title而不是req.params.title。 -
我像你说的那样改变了它,但我仍然得到所有电影,而不仅仅是我正在搜索的电影。
标签: javascript node.js mongodb express