Node.js 如何解决;未指明名称“;邮递员在运行Heroku | NodeJs | MongoDB的URL时出错
我对Heroku、NodeJS和MongoDB都是新手。我在flatter中创建了一个登录表单,它的后端是NodeJS和MongoDB。我使用Heroku连接后端到Flatter,但当我在postman上运行URL(由Heroku在构建项目时提供)时,它会给我“未指定的名称” 这是我的app.js的代码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
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);
}