【问题标题】:returning undefined for get request为获取请求返回未定义
【发布时间】:2020-10-29 12:08:55
【问题描述】:

我一直在做一个 URL 缩短项目,我得到一个未定义的结果来获取请求。 结果我也得到了一个空白页,但据我所知,一切都很好,我不知道是什么错误 这是我的代码(请查看 app.get 部分

'use strict';
var bodyParser = require('body-parser')
var express = require('express');
var mongo = require('mongodb');
var mongoose = require('mongoose');
var http = require("http");
var cors = require('cors');
const dns = require('dns'); 
  
var app = express();

// Basic Configuration 
var port = process.env.PORT || 3000;

/** this project needs a db !! **/ 
// mongoose.connect(process.env.DB_URI);

app.use(cors());

/** this project needs to parse POST bodies **/
// you should mount the body-parser here

app.use('/public', express.static(process.cwd() + '/public'));

app.get('/', function(req, res){
  res.sendFile(process.cwd() + '/views/index.html');
});

  
// your first API endpoint... 
app.get("/api/hello", function (req, res) {
  res.json({greeting: 'hello API'});
});
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true });
var saveSchema = new mongoose.Schema({
  name: String,
  url: Number,
 
});

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

/** 3) Create and Save a Person */
var SaveData = mongoose.model('Save', saveSchema);

//**Here's the start of my problem,i think**
app.get("/api/shorturl/:id1",function(req,res){
 SaveData.find({url:1},function(err,data){  console.log(data.name)//**i am getting undefined for this in console**
res.json(data.name);})
});
app.post("/api/shorturl/new",(req,res)=>{
var body=req.body.url;
dns.lookup(body,(err,data)=>{
  var new2= new SaveData({name:body,url:1});
new2.save((err,data)=>{res.json(new2);});
})
});

app.listen(port, function () {
  console.log('Node.js listening ...');
});

我检查了我的数据库是否输入了模式数据,它正在进入数据库中,所以我认为检索是个问题。

【问题讨论】:

  • SaveData.find({url:1}) 将为您提供 URL 值为 1 的资源。您确定存在这种类型的资源吗?也打印错误和数据,看看输出是什么。数据为空或有错误。如果使用 find 过滤器没有找到匹配的文档,您将在 data 中得到 null
  • 改用console.log(data) 会看到什么?
  • 你总是可以先自己做一些调试:1) 总是查看你正在使用的命令,看看它实际上做了什么。 2)console.log 一切;仔细检查变量是否包含您假设它们包含的内容。记录 data 而不是 data.name 会立即解决这个问题

标签: javascript node.js mongodb express mongoose


【解决方案1】:

mongoose.model.prototype.find 返回找到的对象的数组。如果你在某个控制台中输入Array.prototype.name,你会得到undefined。请改用mongoose.model.prototype.findOne

【讨论】:

    【解决方案2】:

    您的环境变量有效吗?我注意到你没有使用dotenv 模块或类似的东西来配置你的process.env

    【讨论】:

    • 这是评论,不是答案。 (同样没有 mongodb 连接,程序甚至在响应客户端请求之前就会崩溃)
    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2018-08-09
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    相关资源
    最近更新 更多