Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs-if-path/api-serveapi,if-not-servestaticfiles_Javascript_Node.js_Express - Fatal编程技术网

Javascript Nodejs-if-path/api-serveapi,if-not-servestaticfiles

Javascript Nodejs-if-path/api-serveapi,if-not-servestaticfiles,javascript,node.js,express,Javascript,Node.js,Express,我的问题对我来说似乎很复杂,但我想对于有经验的nodejs开发人员来说很简单。我想要的是,我的api只在url为/api/~时响应api调用,但如果任何其他-/或/somethingElse或任何东西-服务于静态文件 我的代码: var app = express(); app.get("/api/users", function (req, res) { getUsers(function (err, users) { if (err) { r

我的问题对我来说似乎很复杂,但我想对于有经验的nodejs开发人员来说很简单。我想要的是,我的api只在url为
/api/~
时响应api调用,但如果任何其他-
/
/somethingElse
或任何东西-服务于静态文件

我的代码:

var app = express();

app.get("/api/users", function (req, res) {
    getUsers(function (err, users) {
        if (err) {
            return res.status(500).send('Error');
        }

        return res.json(users);
    });
});

app.get("/api/user/:_id", function (req, res) {
    getUserById(req.params._id, function (err, user) {
        if (err) {
            return res.status(500).send('Error');
        }

        return res.json(user);
    });
});

谢谢你

我100%听不懂你说的话。。 我猜是你的话

我认为您在连接静态文件时不需要api url页面。
如果正确,请单击此页面

我100%听不懂你的话。。 我猜是你的话

我认为您在连接静态文件时不需要api url页面。
如果正确,请单击此页面

据我所知,您正在寻找
express.static

设置目录以服务于静态文件 假设您有一个包含静态资产的“public”目录

公开的

  • img
    • img1.png
    • img2.png
  • css
    • style.css
以下是如何使它们都可访问:

const path = require('path')

express.use(express.static(path.join(__dirname, 'public')))
注意:公用目录的路径可能位于不同的位置,只需将相关的路径参数添加到
path.join()

现在可以访问以下内容:

const path = require('path')

express.use(express.static(path.join(__dirname, 'public')))
  • /img/img1.png
  • /img/img2.png
  • /css/style.css

快速路由器 现在,由于您希望使用从
/api
开始的各种路由,您可能会发现使用
express.Router
很有用。为每个基本路径创建一个
express.Router()
。例如,为以“/api”开头的路由创建一个名为
apiRouter
。定义路由器后,只需调用
app.use()
,使用基本路径和
apiRouter

let apiRouter = express.Router()

// GET /api/users
apiRouter.get('/users', (res, res, next) => {})

// GET /api/users/:id
apiRouter.get('/users/:id', (req, res, next) => {})

// prefix apiRouter with '/api'
app.use('/api', apiRouter)

据我所知,您正在寻找
express.static

设置目录以服务于静态文件 假设您有一个包含静态资产的“public”目录

公开的

  • img
    • img1.png
    • img2.png
  • css
    • style.css
以下是如何使它们都可访问:

const path = require('path')

express.use(express.static(path.join(__dirname, 'public')))
注意:公用目录的路径可能位于不同的位置,只需将相关的路径参数添加到
path.join()

现在可以访问以下内容:

const path = require('path')

express.use(express.static(path.join(__dirname, 'public')))
  • /img/img1.png
  • /img/img2.png
  • /css/style.css

快速路由器 现在,由于您希望使用从
/api
开始的各种路由,您可能会发现使用
express.Router
很有用。为每个基本路径创建一个
express.Router()
。例如,为以“/api”开头的路由创建一个名为
apiRouter
。定义路由器后,只需调用
app.use()
,使用基本路径和
apiRouter

let apiRouter = express.Router()

// GET /api/users
apiRouter.get('/users', (res, res, next) => {})

// GET /api/users/:id
apiRouter.get('/users/:id', (req, res, next) => {})

// prefix apiRouter with '/api'
app.use('/api', apiRouter)

在完成所有api路由之后,您需要定义一个服务于静态文件的/路由

就你而言:

app.get("/api/users", function (req, res) {
   ...
});

app.get("/api/user/:_id", function (req, res) {
    ...
});


app.use('/', express.static(path.join(__dirname, './'))); // or whatever path you need

阅读。

中的更多内容。在完成所有api路由之后,您需要定义一个服务于静态文件的/route

就你而言:

app.get("/api/users", function (req, res) {
   ...
});

app.get("/api/user/:_id", function (req, res) {
    ...
});


app.use('/', express.static(path.join(__dirname, './'))); // or whatever path you need

阅读更多信息。

path=require('path')是必需的,注意thispath=require('path')是必需的,注意这一点谢谢,但现在它不起作用了,如果我将链接粘贴到浏览器中,我得到了
无法得到/user/1
好的,添加另一个中间件-
应用程序使用('/*.'public')
完成了这项工作。谢谢,但是现在它不起作用了,如果我把链接粘贴到浏览器中,我得到了不能得到的,添加了另一个中间件-
app.use('/*'.'public')
完成了这项工作。谢谢