为什么jquery-3.5.1.min.js是从request.params.id表达式返回的



我使用Expressjs和类型脚本为一个学校项目的简单应用程序。这个路由器获取的是我们必须制作的联系人列表的编辑页面。它在搜索栏中显示正在编辑的当前联系人的ID。问题是,当我想从req(请求(中获取ID时,它会输出2个值。其中一个是我想要的ID,但另一个是一些jquery js文件版本,我不知道如何解决这个问题。

router.get("/edit/:id", async(req, res) => {
let id = req.params.id;
let editContact = await Contact.findById(id, {}, {}, (err, itemForEdit) => {
if (err) {
console.log(err)
} else {
console.log("Profile That will be edited:", itemForEdit)
res.render('../Views/Content/editContact.ejs', { title: 'Home Page', Login: LoginValue, username: currentUser, Contacts: ContactList });
}
}); 
})

当console.log显示时,它会显示Im试图抓取的对象,然后还会显示此消息。

UnhandledPromiseRejectionWarning: CastError: Cast to ObjectId failed for value "jquery-3.5.1.min.js" (type string) at path "_id" for model "contactSchema"

当我执行console.log(req.params)时,它显示2个参数对象:

{ id: 'jquery-3.5.1.min.js' } (NOT THE ONE IM LOOKING FOR)
{ id: '60ca19ec4984810cec017b05' } (THIS IS THE ONE I WANT)

我没有这个叫任何其他软件,我能想到并检查了很多次。

请帮忙!

看起来您有一个网页,其中的脚本元素(<script>标记(引用了JQuery捆绑包。您可以验证id以检查它是否是有效的用户ID(如/[a-z][a-z_0-9]+/i.test("id")(;然后,如果有效,则解析为user,否则使用Node.js文件系统模块解析为文件。

在特定的HTTP端点(与/edit/xxx.js不同(为脚本提供服务会更容易。您可以使用sirv中间件,例如:

import Sirv from 'sirv';
router.use('/js', Sirv('./res/js', {
dev: true,
}))

然后确保<script>标记引用例如/js/jquery.js(注意起始斜线(。

最新更新