繁体   English   中英

解决我无法将Post var保存在MongoDB中,因为我的User.findOne(email)无法正常工作

[英]RESOLVED I cant save the Post var in the MongoDB because my User.findOne(email) doesnt work

我正在建立一个网站后端。 当我从帖子中运行注册时,我的User.findOne(email)会显示以下错误消息:

(节点:10052)UnhandledPromiseRejectionWarning:ObjectParameterError:findOne()的参数“ filter”必须是一个对象,在新的ObjectParameterError(D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ mongoose)处获取了arthurcastilhos@gmail.com。 \\ lib \\ error \\ objectParameter.js:25:11)在model.Query.Query.findOne(D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ mongoose \\ lib \\ query.js:2135:16 ),位于Function.findOne(D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ mongoose \\ lib \\ model.js:2132:13),位于D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ src \\ routes.js:40:27在Layer.handle [作为handle_request](D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ layer.js:95:5)在下一个(D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ route.js:137:13)在Route.dispatch(D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ route.js: 112:3)在Layer.handle [作为handle_request](D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ layer.js:95:5)在D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ index.js:281:22 at Function.process_params(D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ index.js:335:12)在Function.handle(D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ index.js:275:10)( D:\\路由器上的D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ index.js:174:3)(D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ index.js:47:12)位于Layer.handle [作为handle_request](D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ layer.js :95:5)位于trim_prefix(D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ index.js :317:13),位于D:\\ Arquivo de Programas \\ Projetos VS Code \\ devbook \\ backend \\ node_modules \\ express \\ lib \\ router \\ index.js:284:7(node:10052)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。 引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:1)(节点:10052)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。 将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。

我已经更改了失眠ID,将参数从_id更改为user,并将用户从电子邮件更改为。

我的routes.js:

const routes = require('express').Router();
const bcrypt = require('bcryptjs');

const User = require('./models/UserModel');
const Post = require('./controllers/PostController');

routes.get('/', (req, res) => {
  return res.send('Hello, World!')
});

routes.post('/register', async (req, res) => {
  try {
    const user = await User.create(req.body);

    return res.send({ user })
  } catch {
    return res.status(400).send({ error: 'Registration failed' })
  }
});

routes.post('/auth', async (req, res) => {
  const { email, password } = req.body;

  const user = await User.findOne({ email }).select('+password');

  if (!user){
    return res.status(400).send({ error: 'User not found' });
  };

  if (!await bcrypt.compare(password, user.password)){
    return res.status(400).send({ error: 'Invalid password '});
  };

  res.send({ user });
})

routes.post('/post', async (req, res) => {
  const { text, email } = req.body //only test 

  const user = await User.findOne(email)

  if (!user){
    return res.status(400).send({ error: 'User not found' });
    }
    if (!text){
      return res.status(400).send({ error: 'Text not found' });
    }

  res.send(text)
});

module.exports = routes;

我希望帖子中的注册信息可以在首页显示出来

解:

const user = await User.findOne(email)const user = await User.findOne({ email: email })

从错误消息看来,对findOne()的调用似乎只是获取电子邮件字符串,而不是对象。 为什么不使用与其他路由相同的语法?

您是在/ post路由中编写的:

  const user = await User.findOne(email)

但是似乎您应该这样写:

  const user = await User.findOne({ email } )

正确? 这是路线的上半部分,供您参考,并提出了建议的更正方法:

routes.post('/post', async (req, res) => {
  const { text, email } = req.body //only test 

  const user = await User.findOne({ email })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM