【问题标题】:How to read parameters in express node js api如何在express node js api中读取参数
【发布时间】:2018-01-12 12:48:19
【问题描述】:

我创建了 angular5 应用程序,我需要在其中显示所选产品的详细信息,我正在使用 express-nodejs api 从 mongodb 获取数据,但没有获取如何读取查询字符串...或者什么是正确的方法在同一个 api 中读取请求参数。

ngApi-prdDetails/server.js

var express = require('express');
var mongodb = require('mongodb').MongoClient;

var app = express();

var port = process.env.PORT||3000; 
var commanRouter = express.Router();

commanRouter.route('/getPrdDetails')
    .get(function(req,res){

        /*----NOT GETTING prdId---*/
        let prdId =  req.query.ProductId;

        //let prdId =  1008; //-----SHOWING EXPECTED RESULT---//

        var url = 'mongodb://xyz:xyz@ds127536.mlab.com:27536/dbxyz'
        mongodb.connect(url, (err, db) => {  
              if (err) {
                return console.log(err);
              }
              let mydb = db.db("dbxyz");

              let queryM = {"ProductId":prdId};

              mydb.collection('products').find(queryM).toArray(
                function(err,data){
                    if(err)

                       res.status(500).send(err);
                    else
                        res.setHeader('Access-Control-Allow-Origin','*')
                        res.setHeader('Access-Control-Allow-Headers','Origin,X-Requested-With,Content-Type,Accept')
                        res.json(data);
        })
        })

});

app.use('/api', commanRouter);

app.get('/',function(req,res){
    res.send("Working");
});
app.use(express.static(__dirname + '/public'));

app.listen(port, function(){
    console.log("running");
});

product-details.service.ts

@Injectable()

export class ProductService{
    private _prdDetailsUrl= "https://abc-xyz-12345.herokuapp.com/api/getPrdDetails";

    constructor(private _http:Http){ }


    getProductDetails(productId:number):Observable<IProduct[]>{
        let apiURL = `${this._prdDetailsUrl}?ProductId=${productId}`;
        return this._http.get(apiURL)
                    .map((response:Response)=> <IProduct[]>response.json())
                    .catch(this.handleError);
    }


    private handleError(error:Response){
        return Observable.throw(error.json().error || "Server Error!");
    }
}

product-details.component.ts

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { ProductService } from './product.service';

import { IProduct } from './product';

@Component({
    templateUrl:'./product-details.component.html',
    styleUrls:['./product-details.component.css']
})

export class ProductDetailsComponent{
    products:IProduct[];
    errorMessage:string;
    pId:number;
    constructor(private _route:ActivatedRoute,
                private _productService:ProductService){

    }

    ngOnInit():void{
        console.log("<<<<<<---------------------This is Product-Details:Init-------------------------->>>>>>");
        let id = this._route.snapshot.params['id'];
        this.pId =id;

        this._productService.getProductDetails(id)
            .subscribe(products => this.products = products,
            error => this.errorMessage = <any>error);
    }
}

【问题讨论】:

  • Express 通常是这样工作的:/getPrdDetails/123 的请求由get('/getPrdDetails/:id') 处理,它将123 放入req.query.id
  • 也试过了,不知道为什么它会返回空数组,当我通过硬代码'id'时它工作得很好
  • 等等,Love-Kesh 是正确的,掩码参数应该以req.params 结尾。 ...编辑:我使用 url http://localhost:3000/api/getPrdDetails?ProductId=3 按原样测试了您的路线,它在现场有效。我所做的只是res.send(prdId);

标签: javascript node.js api express angular5


【解决方案1】:

使用 req.params 获取路由参数值

let prdId =  req.params.ProductId;

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 2020-08-26
    • 2017-10-31
    • 2014-01-24
    • 2020-04-22
    • 2021-09-22
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多