Node.js 如何解决;未指明名称“;邮递员在运行Heroku | NodeJs | MongoDB的URL时出错

Node.js 如何解决;未指明名称“;邮递员在运行Heroku | NodeJs | MongoDB的URL时出错,node.js,mongodb,flutter,heroku,postman,Node.js,Mongodb,Flutter,Heroku,Postman,我对Heroku、NodeJS和MongoDB都是新手。我在flatter中创建了一个登录表单,它的后端是NodeJS和MongoDB。我使用Heroku连接后端到Flatter,但当我在postman上运行URL(由Heroku在构建项目时提供)时,它会给我“未指定的名称” 这是我的app.js的代码 var body = require('body-parser'); const mongoose = require('mongoose'); var mongodb = require('m

我对Heroku、NodeJS和MongoDB都是新手。我在flatter中创建了一个登录表单,它的后端是NodeJS和MongoDB。我使用Heroku连接后端到Flatter,但当我在postman上运行URL(由Heroku在构建项目时提供)时,它会给我“未指定的名称”

这是我的app.js的代码

var body = require('body-parser');
const mongoose = require('mongoose');
var mongodb = require('mongodb')
var url = 'mongodb://localhost:27017/Mongodb'
var express = require('express');
var app = express();
app.use(body.json());
var bcrypt = require('bcrypt');
var CryptoJS = require("crypto-js")
var jwt = require('jsonwebtoken');
const router= express.Router()
const User = require('./connection');
mongoose.connect('mongodb://localhost:27017/Mongodb', { useUnifiedTopology: true, useNewUrlParser: true },function(err){
  if(err){
    console.log(err)
  }else{
    console.log("connection Successful")
  }
})


// router.get('/Dashboard', (req, res) => {
//   res.send('Hello World')
// })

function checkToken(req,res,result){
  const header= req.headers.token;
  if(typeof header !== 'undefined'){
    const bearer =header.split('.');
    const token = bearer[1]
    //console.log(token)
    req.token = token 
    //next();
    result();
  }else
  res.json("Error")
  }  

const login = require('./routes/login')
app.post("/login", async (req, res, next) => {
  console.log("login api hit")
  login(req,res,next)
  } )  

const userDashboard = require('./routes/userdashboard')
app.post("/Dashboard",checkToken,(req,res)=>  {
  userDashboard(req,res);
}) 

const PORT = process.env.PORT || 5000
  app.listen(PORT, function(){
 
    console.log("Server is running")
    
  })

以下是/routes/login的代码

var body = require('body-parser');
const mongoose = require('mongoose');
var mongodb = require('mongodb')
var url = 'mongodb://localhost:27017/Mongodb'
var express = require('express');
var app = express();
app.use(body.json());
const User = require('../connection');
var bcrypt = require('bcrypt');
var CryptoJS = require("crypto-js")
var jwt = require('jsonwebtoken');

login=(req,res,next)=>{  
  console.log(req.data)
  User.find({"username":req.body.username},function(err,data){
    if(err){
      console.log("unspecified name")
      res.status(400).json("unspecified name")
      return;
    } 
    else{
    console.log(data.length)
         if(data.length<=0)
      {
        res.status(300).json({
          "message":"Invalid Input!"
        })  
      }
      else {
           
        //bcrypt.compare(req.body.password,data[0].password).then(function(result) {
          var bytes = CryptoJS.AES.decrypt(data[0].password, 'my-secret-key@123');
          var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
          console.log(decryptedData)
            if (req.body.password==decryptedData)
              {
                login = "Succesful";            
                var token = jwt.sign({
                  data: 'foobar'
           }, 'secret', { expiresIn: "2 minute"})
           res.status(200).json({auth: true,  AccessToken:token,  User:data[0]}) 
          }
           else
           {res.status(300).json({
            "message":"Input!"
          })}
          
          //  });
          
        }}
      })
}
module.exports = login;
下面是我创建的登录按钮的代码并从身份验证类调用登录方法

  RoundedButton(text:"Login",  press: () {
                     AuthService().login(name,password).then((value){
                       if(value.data['success']){
                         token=value.data['token'];
                         Fluttertoast.showToast(msg: 'Authenticated',
                         toastLength: Toast.LENGTH_SHORT,
                        gravity: ToastGravity.BOTTOM,
                        backgroundColor: Colors.red,
                        textColor: Colors.white,
                        fontSize: 16.0);
                         
                       }

您的mongodb客户端正在本地计算机上运行,您必须使基于云的mongodb群集类似,并使用基于云的群集URI更改您的MongoURI。

解决方案

var body = require('body-parser');
const mongoose = require('mongoose');
var mongodb = require('mongodb')
var url = 'mongodb://localhost:27017/Mongodb'
var express = require('express');
var app = express();
app.use(body.json());
const User = require('../connection');
var bcrypt = require('bcrypt');
var CryptoJS = require("crypto-js")
var jwt = require('jsonwebtoken');

login=(req,res,next)=>{  
  console.log(req.data)
  User.find({"username":req.body.username},function(err,data){
    if(err){
      console.log("unspecified name")
      res.status(400).json("unspecified name")
      return;
    } 
    else{
    console.log(data.length)
         if(data.length<=0)
      {
        res.status(300).json({
          "message":"Invalid Input!"
        })  
      }
      else {
           
        //bcrypt.compare(req.body.password,data[0].password).then(function(result) {
          var bytes = CryptoJS.AES.decrypt(data[0].password, 'my-secret-key@123');
          var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
          console.log(decryptedData)
            if (req.body.password==decryptedData)
              {
                login = "Succesful";            
                var token = jwt.sign({
                  data: 'foobar'
           }, 'secret', { expiresIn: "2 minute"})
           res.status(200).json({auth: true,  AccessToken:token,  User:data[0]}) 
          }
           else
           {res.status(300).json({
            "message":"Input!"
          })}
          
          //  });
          
        }}
      })
}
module.exports = login;

所以,在花了很多时间之后,我终于找到了解决办法!问题是我的Mongodb连接了,问题是IP地址,所以多亏了stackoverflow团队,我从中得到了解决方案(Aka的解决方案),现在我连接到了我的数据库

login
函数在哪里定义?在app.js文件中,“app.post(“/login”,async(req,res,next)=>{”检查这行代码
require('./routes/login')在哪里?
?错误可能在那里。您正在调用
login()
函数,但没有在那里发布代码。@RaulSauco我编辑我的帖子,发布的登录()代码,请检查它现在。在登录功能中,尝试控制台req.body而不是req.data。连接fn看起来可疑,请共享代码。是的,阿里你是对的!我这样做了,但我想问一件事,你能给我一个答案吗?我已经编辑了帖子,请检查我认为你控制台记录了你输入的凭据,而不是数据来源db作为控制台后的下一行“未指定用户”是日志我认为这是db查询后的日志。那么我现在要做的是阿里?我再次编辑我的帖子,请检查,当我输入出现的凭据时!您的用户名和密码是存储在db中的“munib”,您的密码是“munib123”。
  RoundedButton(text:"Login",  press: () {
                     AuthService().login(name,password).then((value){
                       if(value.data['success']){
                         token=value.data['token'];
                         Fluttertoast.showToast(msg: 'Authenticated',
                         toastLength: Toast.LENGTH_SHORT,
                        gravity: ToastGravity.BOTTOM,
                        backgroundColor: Colors.red,
                        textColor: Colors.white,
                        fontSize: 16.0);
                         
                       }